Jenkins主从架构(Master-Slave)是一种分布式架构,主节点负责管理项目配置、任务调度和监控,从节点用于执行具体的构建任务。Jenkins主从架构如下图所示
当项目触发构建时,主节点将任务分配到某个从节点,从节点根据项目配置执行一系列操作,如拉取代、代码编译、部署到目标服务器等。这种方式可以将构建过程中的负载有效地分散到各个从节点上,从而减轻主节点的负担,提高系统的稳定性。尤其是在多个项目同时构建的场景下,主从架构能够显著提高整体的执行效率
1、页面配置slave节点
-
例如,向Jenkins中添加一个从节点,单击Manage Jenkins,再单击Nodes and Clouds,进入节点管理页面,如下图所示
默认存在一个名为Built-In Node的节点,这个节点是Jenkins本机,它不是一个真正的分布式节点。换句话说,在不添加其他节点的情况下,所有项目的构建都在本机执行。 -
单击右上角的New Node按钮添加一个从节点,进入设置节点名称页面,这里输入Jenkins-Slave1,单击Create按钮创建并进入节点配置页面,配置如下:
- Name:节点名称
- Description:节点描述
- Number of executors:节点执行器数量,用于设置同时执行构建任务的数量
- Remote root directory:远程根目录,用于存储工作时产生的文件
- Labels:节点标签,用于表示节点特性或用途的关键词
- Usage:选择如何使用该节点,这里选择Use this node as much as possible,表示希望尽可能使用这个节点来执行构建任务
- Launch method:选择如何启动代理,这里选择Launch agent by connecting it to the controller,表示手动在节点上启动代理程序
具体的节点配置如下图所示
2、命令行添加slave节点
保存配置后,该节点进入离线状态,需要在节点服务器上启动代理程序,登录从节点服务器上,下载代理程序文件
- 代理程序文件获取方式
- 下载代理程序文件、运行代理程序所需的jdk环境
curl -s http://172.16.99.82:8080/jnlpJars/agent.jar -o /usr/local/jenkins-agent.jar
yum install java-11-openjdk git -y
- 后台启动代理程序
nohup java -jar /usr/local/jenkins-agent.jar -url http://172.16.99.82:8080/ -secret da832f2d629072a875c0b17ab70c4823f65b410fe00437870e71ec3ff37df930 -name "Jenkins-Slave1" -webSocket -workDir "/tmp/jenkins" >> /var/log/jenkins-agent.log 2>&1 &
一旦代理程序启动并成功连接到Jenkins,该节点会转为在线状态。
此时,项目触发构建,Jenkins 会优先将任务分配到这个从节点上。在控制台输出中,可以看到 Building remotely on Jenkins-Slave1 (web),这说明构建过程在Jenkins-slave节点上进行,而不是在Jenkins本机上执行
Jenkins 还提供了代理程序的容器镜像 jenkins/inbound-agent。使用Docker创建代理程序容器的命令如下:
docker run -d --name jenkins-slave --restart always --init uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21 -url http://172.16.99.82:8080/ da832f2d629072a875c0b17ab70c4823f65b410fe00437870e71ec3ff37df930 Jenkins-Slave1docker run --init jenkins/inbound-agent -url http://jenkins-server:port <secret> <agent name>
- 参数介绍
- --name:容器的名称,这里可以自定义为 jenkins-slave
- -- restart:容器的重启策略,always
- --init:该选项启用 Docker 容器的进程管理(初始化进程)。启用初始化进程可以帮助容器正确处理一些信号,保证容器内应用的健康和资源清理。
- -url:jenkins-master的地址
- secret:创建完jenkins-slave可以看到
- agent name:jenkins-slave的名称,需要也页面看到的保持一致