温馨提示×

Jenkins在CentOS上如何集群部署

小樊
34
2025-11-16 03:21:56
栏目: 智能运维

Jenkins 在 CentOS 上的集群部署指南

一 架构与准备

  • 架构选型:采用 Master–Agent(主从) 模式,Master 负责任务调度与界面管理,Agent 负责实际构建;Agent 节点无需安装 Jenkins 二进制,仅安装 JDK 与构建所需工具(如 Git、Maven、.NET SDK 等)。为提升可用性,可在前端部署 Nginx/HAProxy 做负载均衡与健康检查。Jenkins 2.x 建议使用 Java 11/17/21。防火墙需放行 8080(Web)与 50000(Agent 通信)端口。以上做法为主流且稳定的实践路径。

二 安装与初始化 Master

  • 安装 Java(以 OpenJDK 11 为例):
    • 命令:sudo yum install -y java-11-openjdk-devel
    • 验证:java -version
  • 安装 Jenkins(YUM 方式):
    • 导入仓库并安装(以官方仓库为例):
      • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
      • sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
      • sudo yum install -y jenkins
    • 启动与开机自启:
      • sudo systemctl start jenkins
      • sudo systemctl enable jenkins
    • 访问与初始化:浏览器打开 http://<master_ip>:8080,按向导完成解锁与插件安装。以上步骤覆盖在线 YUM 安装与基础初始化。

三 添加 Agent 节点的三种常用方式

  • 方式 A(推荐)— SSH 启动 Agent
    • Master 生成密钥并分发至 Agent
      • ssh-keygen -t rsa -b 2048
      • ssh-copy-id <agent_user>@<agent_ip>
    • Agent 准备环境:安装 JDK 与项目依赖(如 git、maven 等),确保 Master 可 SSH 登录 Agent
    • Master UI 添加节点:进入 Manage Jenkins → Manage Nodes and Clouds → New Node,填写名称,类型选 Permanent Agent,配置:
      • 远程工作目录(如:/home/jenkins
      • 标签(如:linux、build
      • 用法Use this node as much as possible
      • 启动方式Launch agents via SSH
      • 选择或新增 Credentials(用户名/私钥或用户名/密码)
      • 首次连接按提示 信任主机密钥 并启动代理。该方式稳定、权限可控,适合生产环境。
  • 方式 B — JNLP 启动 Agent(手动或脚本)
    • Master UI 新建节点后,下载 agent.jar 并在 Agent 执行:
      • wget http://<master_ip>:8080/jnlpJars/agent.jar -O /tmp/agent.jar
      • java -jar /tmp/agent.jar -jnlpUrl http://<master_ip>:8080/computer/<agent_name>/slave-agent.jnlp -secret <secret> -workDir "/home/jenkins"
    • 适合受限网络或容器化场景,注意 JNLP 端口 50000 与网络连通性。
  • 方式 C — Docker 运行 Agent(容器化)
    • 运行示例(挂载工作目录与挂载本地工具):
      • docker run -d --name jenkins-agent \ -v /home/jenkins:/var/jenkins_home \ -v /usr/bin/git:/usr/bin/git:ro \ -e JENKINS_URL=http://<master_ip>:8080 \ jenkins/agent:latest
    • Master 中通过 JNLPKubernetes/SSH 方式接入该容器。容器化便于弹性扩缩与隔离。

四 高可用与负载均衡

  • 前置 Nginx/HAProxy,对外暴露 8080,后端指向多个 Master(如 http://192.168.1.11:8080http://192.168.1.12:8080),开启 健康检查会话保持(如基于 JSESSIONID 的 cookie)。示例(HAProxy 片段):
    • frontend jenkins
      • bind *:8080
      • default_backend jenkins_servers
    • backend jenkins_servers
      • balance roundrobin
      • option httpchk GET /login
      • server master1 192.168.1.11:8080 check
      • server master2 192.168.1.12:8080 check
  • 注意:Jenkins 内置 Job 队列与构建记录存储在 Master 的 $JENKINS_HOME,多 Master 仅做流量分担,并不天然共享状态;要实现作业与构建持久化/共享,需引入 外部持久化(如 NFS) 或采用 Jenkins Operator/Kubernetes 等方案。上述负载均衡做法与注意事项适用于提升可用性与横向扩展。

五 安全与运维要点

  • 安全加固:在 Manage Jenkins → Configure Global Security 启用 安全矩阵/登录,禁用匿名访问;为 SSH/JNLP 使用最小权限凭据;对外仅暴露必要端口 8080/50000
  • 节点环境一致性:Agent 需预装与项目匹配的 JDK、构建工具链与依赖,并在 节点配置 → 工具位置/环境变量 中显式声明,避免因路径不一致导致构建失败。
  • 日志与监控:定期收集 /var/log/jenkins/jenkins.logAgent 日志;结合 Prometheus + Grafana 监控 Master/Agent 资源与队列长度,及时扩容 执行器Agent
  • 备份与恢复:定期备份 $JENKINS_HOME(含 jobs、config.xml、credentials.xml、plugins 等),并进行 恢复演练,确保灾难恢复可达标。

0