Jenkins在Linux中实现分布式构建的完整步骤
环境要求
java -version验证);安装Jenkins
sudo apt update
sudo apt install openjdk-11-jdk # 安装Java
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins # 安装Jenkins
sudo systemctl start jenkins && sudo systemctl enable jenkins # 启动并设为开机自启
进入节点管理界面
登录Jenkins Web界面(http://<master-ip>:8080),依次点击Manage Jenkins → Manage Nodes and Clouds → New Node。
创建工作节点
linux-node-01);2,根据节点硬件资源调整);/var/lib/jenkins,需提前创建并赋权chmod 755 /var/lib/jenkins);linux、docker),用于后续任务定向分配(如linux表示该节点用于Linux环境构建);配置SSH连接
ssh-keygen -t rsa(默认路径~/.ssh/id_rsa);id_rsa.pub)复制到主控节点的~/.ssh/authorized_keys中;启动Jenkins代理
在工作节点终端执行以下命令(替换<master-ip>、<node-name>、<credentials-id>):
java -jar agent.jar -jnlpUrl http://<master-ip>:8080/computer/<node-name>/slave-agent.jnlp -secret <credentials-id> -workDir "/var/lib/jenkins"
-jnlpUrl:主控节点的工作节点JNLP地址(可在Manage Nodes页面复制);-secret:节点的认证密钥(可在Manage Nodes→节点名称→Configure→Credentials中查看);-workDir:远程工作目录(需与主控节点配置一致)。验证节点状态
返回Jenkins Web界面的Manage Nodes页面,若节点状态显示为Idle(空闲),则表示连接成功。
创建流水线任务
在Jenkins中点击New Item→Pipeline→OK,进入任务配置页面。
配置节点标签
在Pipeline部分,选择Pipeline script from SCM(从SCM获取脚本)或Pipeline script(直接编写脚本),并在agent部分指定标签:
pipeline {
agent {
node {
label 'linux' // 匹配工作节点的标签
}
}
stages {
stage('Test') {
steps {
echo 'Running on Linux node'
sh 'uname -a' // 打印节点系统信息(验证是否为Linux)
}
}
}
}
或直接在General→Restrict where this project can be run中输入标签(如linux)。
运行任务并验证
点击Build Now,进入Build History查看任务状态,点击构建记录→Console Output,若输出包含工作节点的系统信息(如Linux node203 5.4.0-110-generic #124-Ubuntu SMP),则表示分布式构建成功。
环境变量配置
在工作节点的Configure→Environment variables中添加自定义变量(如JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64),供构建任务使用。
限制任务类型
在工作节点的Configure→Usage中选择Only build jobs with label expression matching this node,并设置标签表达式(如linux && docker),确保仅执行匹配标签的任务。
监控节点状态
通过Manage Jenkins→Manage Nodes查看节点的CPU使用率、内存占用、构建队列等信息,及时调整节点配置。
通过以上步骤,即可在Linux环境中实现Jenkins的分布式构建,充分利用多台Linux节点的资源,提升构建效率。