温馨提示×

Jenkins在Ubuntu上如何进行多节点管理

小樊
36
2025-11-22 19:29:35
栏目: 智能运维

在 Ubuntu 上实施 Jenkins 多节点管理的核心思路是将构建任务从 Master 卸载到多个 Agent/从节点,通过节点 标签 进行调度,并用 SSHJNLP 建立连接。这样可显著提升并行构建能力与系统弹性。

一、架构与准备

  • 架构要点: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,填写 HostCredentials(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 securityRole-Based Strategy),使用 凭据绑定 管理密钥与密码;仅开放必要端口(如 8080/HTTPJNLP),并限制来源 IP;SSH 采用密钥登录,禁用口令登录。
  • 高可用思路:Master 仅做调度,避免在其上执行重构建;对关键任务使用 重试/超时健康检查;如需故障自动切换,可在外层引入 Keepalived + VIP 或负载均衡,实现 Master 故障时的快速切换(Jenkins 自身以 Master-Slave 架构为主,Keepalived 用于 VIP 漂移)。

0