当前位置:首页 > 随笔 > 正文内容

基于Docker容器化部署Jenkins主节点与弹性工作节点实践

访客 随笔 2026年5月26日 4

一、容器化部署Jenkins主控服务

采用阿里云镜像源快速搭建Docker运行环境,并拉取指定版本的Jenkins长期支持版镜像:

# 配置Docker软件源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum clean all && yum makecache fast
yum install -y docker-ce

# 获取Jenkins镜像(JDK11版本)
docker pull jenkins/jenkins:2.375.1-lts-jdk11

# 创建持久化数据目录并设置权限(容器内jenkins用户UID为1000)
mkdir -p /data/jenkins_home
chown -R 1000:1000 /data/jenkins_home

# 启动主控容器
docker run -d --name jenkins-controller \
  --privileged \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /data/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:2.375.1-lts-jdk11

50000端口用于JNLP协议通信,供工作节点与主控建立连接。初始化完成后通过以下命令获取管理员密钥:

docker exec jenkins-controller cat /var/jenkins_home/secrets/initialAdminPassword

访问http://<服务器IP>:8080完成向导配置,推荐安装推荐插件集。

二、静态工作节点接入方案

1. 主控端节点注册

进入系统管理 → 节点管理 → 新建节点,选择"永久代理"类型,填写节点标识名称。

2. 节点参数配置

关键配置项说明:

  • 远程工作目录:/home/jenkins/agent
  • 启动方式:通过Java Web启动代理(JNLP)
  • 可用性:尽可能保持在线

3. 获取连接凭证

保存节点配置后,进入节点详情页查看JNLP启动参数,记录以下信息:

  • 主控访问地址(如:http://192.168.1.100:8080/
  • 节点密钥(Secret)
  • 节点名称(Agent Name)

4. 工作节点容器启动

在目标服务器部署JNLP代理容器:

# 拉取与主控JDK版本兼容的代理镜像
docker pull jenkins/inbound-agent:jdk11

# 启动代理容器(示例参数需替换为实际值)
docker run -d --name static-agent-01 \
  --privileged \
  -v /etc/localtime:/etc/localtime:ro \
  jenkins/inbound-agent:jdk11 \
  -url http://192.168.1.100:8080/ \
  <节点密钥> \
  <节点名称>

# 查看连接日志
docker logs -f static-agent-01

状态显示为在线即表示接入成功。

三、动态工作节点弹性伸缩方案

1. Docker服务端配置

启用Docker远程API(工作节点服务器执行):

# 修改服务配置文件
vim /usr/lib/systemd/system/docker.service
# 在ExecStart后追加:-H tcp://0.0.0.0:2376

# 重载并验证
systemctl daemon-reload
systemctl restart docker
curl http://127.0.0.1:2376/version

2. 准备构建环境镜像

定制包含JDK、Maven、Git的基础构建镜像(确保JDK版本≥主控):

docker pull harbor.example.com/builder/jdk11-maven-git:v1.0

3. 方案一:Cloud方式配置

步骤1:安装插件

插件管理中搜索并安装 Docker 插件。

步骤2:配置云服务商

进入系统管理 → Clouds → 新建,选择Docker类型:

  • Docker Host URItcp://192.168.1.133:2376
  • 凭证:如启用TLS则配置证书,否则留空

步骤3:定义容器模板

  • 标签:docker-elastic
  • Docker镜像:harbor.example.com/builder/jdk11-maven-git:v1.0
  • 远程文件系统根目录:/home/jenkins
  • 启动方式:连接到JNLP主控
  • JNLP隧道:主控IP:50000(如跨网络需配置)

步骤4:流水线验证

pipeline {
    agent {
        label 'docker-elastic'
    }
    stages {
        stage('环境检查') {
            steps {
                sh 'java -version'
                sh 'mvn -v'
                sh 'git --version'
            }
        }
    }
}

触发构建后,系统将自动拉取镜像创建容器,任务结束后自动销毁。

4. 方案二:声明式直接调用

在Pipeline中直接使用dockerNode步骤动态申请资源:

dockerNode(
    dockerHost: 'tcp://192.168.1.133:2376',
    image: 'harbor.example.com/builder/jdk11-maven-git:v1.0',
    remoteFs: '/home/jenkins'
) {
    stage('构建') {
        sh 'java -version'
        sh 'mvn clean package -DskipTests'
    }
}

此方式无需预先配置Cloud,适合临时性构建需求或脚本化场景。

四、关键注意事项

项目说明
JDK版本对齐工作节点JDK版本不得低于主控,建议统一使用JDK11或JDK17
权限配置自定义镜像建议以root运行,避免挂载卷权限问题
网络连通确保工作节点能访问主控的8080(Web)和50000(JNLP)端口
镜像预热动态节点首次启动需拉取镜像,建议在非高峰时段预拉取

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

Selenium自动化测试入门指南

Selenium自动化测试入门指南

什么是自动化测试? 自动化测试是指利用软件工具自动执行测试用例,模拟用户操作,如打开网页、点击链接、输入文本等,并验证结果是否符合预期。 其主要优点包括: 大幅减少人工成本 测试速度快 可以在非工作时间运行 支持持续集成和交付 然而,它也存在一些局限性,例如开发成本较高、不适合快速变化的项目、依赖稳定的UI界面等。 自动化测试的应用条件 适合引入自动化测试的情况包括: 手动测试耗时且需要大量...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。