Jenkins在Linux上如何进行集群管理
小樊
43
2025-12-29 22:12:54
Jenkins在Linux上的集群管理实战指南
一 架构与准备
- 架构角色:使用1个Master负责调度与UI,多个Agent/Slave负责执行构建;Master与Agent建议在同一局域网/VPC,网络可达。通信要点:Master的8080(Web)与50000(JNLP)端口需对Agent开放;Agent的22(SSH)端口需对Master开放。
- 软件环境:各节点安装Java 11+(推荐OpenJDK 11);Master安装Jenkins ≥ 2.300;Agent仅需JRE即可。
- 节点规划:按CPU/内存/磁盘为Agent设置合理的Executors与工作目录(如/home/jenkins/agent),避免资源争用。
- 安全基线:优先使用SSH密钥认证;限制8080访问来源;为JNLP端口设置访问控制。
二 搭建步骤
- Master安装(以CentOS为例):添加官方仓库并安装
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
sudo systemctl start jenkins && sudo systemctl enable jenkins
访问http://<Master_IP>:8080完成初始化。
- 插件与安全:在Manage Jenkins → Manage Plugins安装必要插件(如SSH Slaves、Docker相关、Kubernetes相关);在Configure Global Security开启TCP port for JNLP agents(默认50000)。
- 添加Agent(推荐SSH方式):
- 在Agent安装Java并启动SSH(systemctl start sshd)。
- Master进入Manage Jenkins → Manage Nodes and Clouds → New Node,类型选Permanent Agent,配置:
- Remote root directory:如**/home/jenkins/agent**
- Number of executors:如2(按资源调整)
- Launch method:选择Launch agents via SSH
- Host:Agent IP/域名;Credentials:添加SSH私钥
- 保存后,Agent将自动连接;也可在节点页面复制Agent Command在Agent上手动启动。
- 添加Agent(JNLP方式,无SSH时):在Master节点页面点击Launch agent下载slave-agent.jnlp,在Agent执行:
java -jar /path/to/slave-agent.jnlp -workDir “/home/jenkins/agent”
看到“Agent successfully connected and online”即成功。
三 任务调度与并行
- 标签与节点选择:为Agent设置标签(Label)(如linux-agent)。
- Freestyle项目:勾选Restrict where this project can be run,填写标签或节点名。
- Pipeline项目:在Jenkinsfile中指定:
pipeline {
agent { node { label ‘linux-agent’ } }
stages {
stage(‘Build’) { steps { sh ‘echo “Building on $(hostname)”’; sh ‘mvn clean package’ } }
}
}
- 验证与监控:在任务页点击Build Now,通过Console Output确认执行主机名;在Manage Nodes and Clouds查看Online/Offline与Executors占用。
四 高可用与扩展
- 多Agent负载均衡:增加Agent数量并按CPU/内存与工具链类型(如Maven、Node、Docker)打标签,实现按标签/节点调度与横向扩展。
- 容器化与动态扩缩容:使用Kubernetes插件将Agent以Pod方式动态创建/销毁,适合弹性与隔离场景。
- 多Master与入口负载均衡:部署Nginx/HAProxy对多个Master的8080端口做反向代理,实现入口高可用(注意会话粘滞/Websocket支持)。示例Nginx片段:
upstream jenkins_cluster { server :8080; server :8080; }
server { listen 80; location / { proxy_pass http://jenkins_cluster; 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; } }
- 重要提示:Jenkins的“多Master”通常指入口层高可用与任务调度层分离;构建执行仍由Agent承担。如需“Master故障切换/状态共享”,需引入Jenkins Controller高可用方案或外部一致性存储与共享文件系统,实施复杂度较高,建议结合组织成熟度分阶段推进。
五 运维与安全要点
- 资源与JVM:按节点资源设置Executors;在**/etc/default/jenkins**中调优JVM,如:
JAVA_ARGS=“-Xms2g -Xmx4g -Djava.awt.headless=true”(避免过大堆导致长时间GC停顿)。
- 工具链与路径:在Manage Jenkins → Global Tool Configuration统一配置JDK、Git、Maven、Docker等路径,保证跨节点一致性。
- 安全加固:
- 使用SSH密钥,禁用密码登录;
- 通过防火墙/安全组限制8080/50000访问来源;
- 及时更新插件与系统补丁,减少暴露面。
- 监控与日志:关注Manage Nodes中节点状态与Console Output;为关键流水线增加通知(邮件/IM)与归档策略。