如何在centos上实现jenkins的高可用部署
导读:在 CentOS 上实现 Jenkins 高可用部署 一 架构选型与总体思路 开源版 Jenkins 的控制器(Controller)是有状态单体,生产上常用“多 Controller + 共享存储 + 外部负载均衡”的方式实现高可用与横...
在 CentOS 上实现 Jenkins 高可用部署
一 架构选型与总体思路
- 开源版 Jenkins 的控制器(Controller)是有状态单体,生产上常用“多 Controller + 共享存储 + 外部负载均衡”的方式实现高可用与横向扩展。
- 推荐架构:
- 至少 2 台 CentOS 作为 Jenkins Controller,前置 HAProxy/Nginx 做四层/七层负载均衡与健康检查。
- 使用 NFS 或企业级共享存储(如 CephFS、GlusterFS)共享 JENKINS_HOME,保证多 Controller 实例状态一致。
- 构建负载由 Agent/从节点承担,Controller 专注调度与视图展示,提升稳定性与扩展性。
- 通过 定期备份 与 监控告警 完善可用性闭环。
二 环境与前置准备
- 节点规划示例:
- 10.0.0.10 controller-01(安装 Jenkins)
- 10.0.0.11 controller-02(安装 Jenkins)
- 10.0.0.12 nfs-server(共享存储)
- 10.0.0.20~30 agent-01~N(构建节点)
- 基础要求:
- 所有节点安装 Java 11+(Jenkins 2.x 推荐),并配置 JAVA_HOME。
- 系统防火墙/SELinux 放通 8080/TCP(Web)、50000/TCP(JNLP Agents) 与 NFS 相关端口(如 111/TCP/UDP、2049/TCP/UDP 等)。
- 建议时间同步(如 chrony),避免因时间漂移导致任务/插件异常。
三 共享存储 NFS 部署与挂载
- 在 NFS 服务器(10.0.0.12)执行:
- 安装与启动:
- sudo yum install -y nfs-utils rpcbind
- sudo systemctl enable --now rpcbind & & sudo systemctl enable --now nfs-server
- 共享目录与权限:
- sudo mkdir -p /data/jenkins_home
- sudo chown -R jenkins:jenkins /data/jenkins_home
- sudo chmod 755 /data/jenkins_home
- 配置导出(/etc/exports):
- /data/jenkins_home 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)
- 使配置生效:
- sudo exportfs -rav
- sudo showmount -e localhost
- 安装与启动:
- 在每台 Controller(10.0.0.10/11)执行:
- 安装客户端:sudo yum install -y nfs-utils
- 创建本地挂载点:sudo mkdir -p /var/lib/jenkins
- 挂载共享目录:sudo mount -t nfs 10.0.0.12:/data/jenkins_home /var/lib/jenkins
- 开机自动挂载(/etc/fstab):
- 10.0.0.12:/data/jenkins_home /var/lib/jenkins nfs defaults 0 0
- 验证:在共享目录创建测试文件,确保两端可见且权限正确。
四 安装与配置 Jenkins Controller
- 安装(两台 Controller 相同操作):
- 添加仓库并安装:
- 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.key
- sudo yum install -y jenkins
- 建议以 jenkins 用户运行,并确认 /var/lib/jenkins 属主为 jenkins。
- 添加仓库并安装:
- 关键配置(/etc/sysconfig/jenkins 或 systemd 环境):
- 设置 JENKINS_HOME=/var/lib/jenkins
- 设置 JENKINS_PORT=8080
- 设置 JENKINS_ARGS=“–httpListenAddress=0.0.0.0”
- 可选:设置 JAVA_OPTS(如堆内存):-Xms2g -Xmx4g
- 启动与自启:
- sudo systemctl daemon-reload
- sudo systemctl enable --now jenkins
- 首次访问与初始化:
- 打开 http://< VIP|任一Controller_IP> :8080,完成解锁与插件安装。
- 建议安装 推荐插件,并配置 全局安全(启用安全、限制匿名、配置代理端口等)。
五 负载均衡与健康检查
- 方案 A(四层 TCP,推荐):HAProxy
- 安装:sudo yum install -y haproxy
- 配置示例(/etc/haproxy/haproxy.cfg):
- frontend jenkins_http
- bind 0.0.0.0:8080
- mode tcp
- default_backend jenkins_controllers
- backend jenkins_controllers
- mode tcp
- balance roundrobin
- option tcp-check
- server controller-01 10.0.0.10:8080 check inter 2s fall 3 rise 2
- server controller-02 10.0.0.11:8080 check inter 2s fall 3 rise 2
- frontend jenkins_http
- 启用:sudo systemctl enable --now haproxy
- 方案 B(七层 HTTP):Nginx
- 安装:sudo yum install -y nginx
- 配置示例(/etc/nginx/conf.d/jenkins.conf):
- upstream jenkins {
- server 10.0.0.10:8080 max_fails=3 fail_timeout=30s;
- server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
- }
- server {
- listen 80;
- location / {
- proxy_pass http://jenkins;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
- }
- upstream jenkins {
- 启用:sudo systemctl enable --now nginx
- 健康检查要点:
- 对 8080 做 TCP/HTTP 探活;对 50000(JNLP)按需放通与探活。
- 建议使用 VIP/Keepalived 或云厂商 LB 作为前端入口,避免单点。
六 构建节点与高可用增强
- 添加 Agent(在 Jenkins Web:Manage Jenkins → Manage Nodes and Clouds → New Node):
- 名称与标签(如 linux-docker),并发构建数按 CPU/内存规划。
- 启动方式可选:
- Launch agent via SSH:在 Master 上配置到 Agent 的 SSH 免密,适合稳定网络与统一管控。
- Launch agent by connecting it to the master:在 Agent 上运行 agent.jar 连接 Master 的 JNLP 50000 端口,适合跨公网/防火墙环境。
- 典型命令(JNLP 方式):
- 在 Agent 下载并启动:
- wget http://< JENKINS_URL> /computer/< AGENT_NAME> /slave-agent.jnlp -O /tmp/agent.jar
- java -jar /tmp/agent.jar -jnlpUrl http://< JENKINS_URL> /computer/< AGENT_NAME> /slave-agent.jnlp
- 在 Agent 下载并启动:
- 高可用增强建议:
- 使用 标签 将 Job 绑定到合适 Agent,避免单点资源争用。
- 配置 工具位置(JDK、Maven、Node 等)与 环境变量,保证构建一致性。
- 定期 备份 $JENKINS_HOME(含 jobs、plugins、credentials.xml 等),并演练恢复流程。
- 监控 JVM、HTTP 延迟、队列长度、构建失败率,结合告警策略提升可用性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在centos上实现jenkins的高可用部署
本文地址: https://pptw.com/jishu/785993.html
