在 Ubuntu 上实施 Jenkins 多节点管理的核心思路是将构建任务从 Master 卸载到多个 Agent/从节点,通过节点 标签 进行调度,并用 SSH 或 JNLP 建立连接。这样可显著提升并行构建能力与系统弹性。
一、架构与准备
- 架构要点:Master 负责任务调度与 UI,多个 Agent 负责执行构建;通过给节点打 Labels(如 linux、docker、gpu)实现按标签调度;为不同项目设置并发构建数(Number of executors)与隔离的工作目录。
- 环境与一致性:所有节点安装 Java(推荐 OpenJDK 11),并保持 JDK 版本一致;在 Agent 上预装与项目匹配的构建工具(如 Git、Maven、Docker),避免因环境不一致导致任务失败。
二、节点连接方式
- SSH 方式(推荐,便于自动化与审计)
- 在 Master 生成 SSH 密钥对,将公钥分发到各 Agent 的 authorized_keys;在 Jenkins 节点配置中选择 Launch agent via SSH,填写 Host、Credentials(SSH Username with private key)、端口 22,并按需设置 Host Key Verification Strategy(首次可手动信任)。
- 在 Agent 上创建 Jenkins 工作目录(如 /var/lib/jenkins)并赋权,确保 Master 可写入与执行。
- JNLP 方式(Agent 主动连接 Master)
- 在 Master 的 Manage Jenkins → Configure Global Security 勾选 Enable security TCP port for JNLP agents,端口可选 Random;在 Agent 下载 agent.jar,使用 java -jar agent.jar -jnlpUrl http:///computer//slave-agent.jnlp 连接;确保网络与防火墙放行相应端口。
三、添加与管理节点
- 添加节点:进入 Manage Jenkins → Manage Nodes and Clouds → New Node,类型选 Permanent Agent,填写 Name、Remote root directory、Labels、Usage、Launch method、Number of executors、Availability 等;保存后按需启动 Agent。
- 管理与调度:在节点列表查看 在线状态、负载、日志;通过 Labels 在 Job 配置中指定运行节点(如 Restrict where this project can be run 或 Pipeline 的 agent { label ‘xxx’ });按 CPU/内存与磁盘为节点设置合理的 并发构建数,避免资源争用。
四、并行与分布式实践
- 并行阶段:在 Pipeline 中使用 parallel 将多个任务并行执行,缩短整体耗时。
- 多节点分发:为不同节点打上不同 Labels(如 docker、linux、gpu),在 Job 或 Pipeline 中按标签选择目标节点,实现跨节点并行与资源隔离。
- 示例(Pipeline 按标签运行并并行):
pipeline {
agent { label ‘docker’ }
stages {
stage(‘Build’) { steps { sh ‘echo Building…’ } }
stage(‘Test’) { steps { sh ‘echo Testing…’ } }
stage(‘Deploy’) {
parallel {
stage(‘EnvA’) { steps { sh ‘echo Deploy A…’ } }
stage(‘EnvB’) { steps { sh ‘echo Deploy B…’ } }
}
}
}
}
以上做法结合 节点标签 与 并行阶段,可充分利用多节点资源。
五、安全与高可用建议
- 安全加固:在 Configure Global Security 启用安全域与授权策略(如 Matrix-based security 或 Role-Based Strategy),使用 凭据绑定 管理密钥与密码;仅开放必要端口(如 8080/HTTP 与 JNLP),并限制来源 IP;SSH 采用密钥登录,禁用口令登录。
- 高可用思路:Master 仅做调度,避免在其上执行重构建;对关键任务使用 重试/超时 与 健康检查;如需故障自动切换,可在外层引入 Keepalived + VIP 或负载均衡,实现 Master 故障时的快速切换(Jenkins 自身以 Master-Slave 架构为主,Keepalived 用于 VIP 漂移)。