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 中通过 JNLP 或 Kubernetes/SSH 方式接入该容器。容器化便于弹性扩缩与隔离。
四 高可用与负载均衡
- 前置 Nginx/HAProxy,对外暴露 8080,后端指向多个 Master(如 http://192.168.1.11:8080 与 http://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.log 与 Agent 日志;结合 Prometheus + Grafana 监控 Master/Agent 资源与队列长度,及时扩容 执行器 或 Agent。
- 备份与恢复:定期备份 $JENKINS_HOME(含 jobs、config.xml、credentials.xml、plugins 等),并进行 恢复演练,确保灾难恢复可达标。