1. Jenkins 架构概述
Jenkins 是一个支持分布式构建的持续集成工具,其核心架构采用 Master-Slave(主从)架构。这种设计解决了单机部署下资源瓶颈和多环境测试的需求问题。
1.1 Jenkins Master(主节点)
Jenkins 主节点负责:
- 调度任务(Job)
- 分配 Slave 节点执行任务
- 监控 Slave 节点状态(在线/离线)
- 收集并展示构建结果
主节点是整个 Jenkins 系统的“大脑”,不建议在主节点上直接执行构建任务,以免影响调度性能和系统稳定性。
1.2 Jenkins Slave(从节点)
Jenkins Slave 是运行在远程服务器上的代理节点,负责接收主节点下发的构建任务并执行。Slave 支持多种操作系统(Windows、Linux、macOS 等),并且可以灵活配置标签(Label)以便任务调度时选择特定环境。
1.3 分布式主从架构示例
如下图所示,Jenkins 主节点连接了多个 Slave 节点,用于在不同操作系统环境下执行构建任务:
构建流程如下:
- Jenkins 定期轮询 Git 仓库是否有代码变更
- 根据项目配置,将构建任务分发给合适的 Slave 节点
- Slave 执行构建任务并将结果返回给 Master 节点
- Master 节点汇总结果并展示在控制台输出中
2. Jenkins CLI 使用
Jenkins 提供了命令行接口(CLI),方便用户通过脚本或命令行与 Jenkins 交互。
2.1 获取 Jenkins CLI 工具
从 Jenkins 控制台下载 jenkins-cli.jar
:
JENKINS_URL/jnlpJars/jenkins-cli.jar
执行命令示例:
java -jar jenkins-cli.jar -s http://localhost:8080/ -webSocket help
2.2 CLI 工具使用入口
在 Jenkins 的 “Manage Jenkins” 页面中,点击 “Jenkins CLI” 即可查看可用命令:
3. 手动重启或关闭 Jenkins
有时我们需要手动重启或关闭 Jenkins,比如升级插件或调整配置。
3.1 重启 Jenkins
- 强制重启(不等待任务完成)
http://(jenkins_url)/restart
- 安全重启(等待任务完成后重启)
http://(jenkins_url)/safeRestart
- 通过系统服务重启(适用于 rpm/deb 安装方式)
service jenkins restart
- Ubuntu 系统重启方式
sudo /etc/init.d/jenkins restart
可用参数:start | stop | status | restart | force-reload
3.2 安全关闭 Jenkins
- 安全退出(等待任务完成)
http://(jenkins_url)/exit
- 强制终止(立即关闭)
http://(jenkins_url)/kill
⚠️ 使用 /kill
接口需谨慎,可能会导致构建任务中断。
4. 提升 Jenkins 性能的建议
Jenkins 性能下降是常见的问题,尤其在项目多、构建频繁的环境中。以下是一些优化建议:
4.1 避免在 Master 上执行构建任务
✅ 推荐做法: 将构建任务限制在 Slave 节点上执行,保留 Master 节点用于调度和管理。
示例(在 Jenkins Pipeline 中指定 Slave 节点):
stage("stage 1"){
node("SlaveNode"){
sh "echo \"Hello ${params.NAME}\" "
}
}
只有标签为 SlaveNode
的节点才会执行该阶段任务。
4.2 控制构建历史保留数量
在任务配置中设置“Discard Old Builds”,限制构建历史的保留数量。频繁构建时保留过多历史会占用大量磁盘空间和内存资源。
4.3 定期清理旧数据
Jenkins 升级或插件更新时会保留旧数据格式以支持回滚,但这也可能导致内存占用过高。
✅ 建议: 定期访问 “Manage Jenkins > Manage Old Data” 页面清理无用数据。
4.4 设置合适的堆内存大小
Jenkins 是基于 Java 的应用,合理设置 JVM 堆内存至关重要。
- UseCompressedOops 是 JVM 的一个优化特性,可将对象指针压缩为 32 位,节省内存。
- 该特性默认在堆大小不超过 32GB 时启用。
- 超过 32GB 后会失效,需要手动调优或增加到 48GB。
✅ 建议: 堆大小控制在 32GB 以内。
使用以下命令检查是否启用:
jinfo -flag UseCompressedOops <pid>
4.5 调整垃圾回收器(GC)
GC 是影响 Jenkins 性能的关键因素之一,尤其在堆内存较大时。
✅ 优化建议:
- 使用 G1GC(JDK9+ 默认)
- 启用 GC 日志记录,便于后续分析
- 必要时通过 JVM 参数调优 GC 行为
- 持续监控 GC 行为,避免长时间停顿
5. 总结
本文介绍了 Jenkins 的主从架构原理,以及如何通过 CLI 工具管理 Jenkins。同时,也提供了一些提升 Jenkins 性能的实用建议,包括:
- 避免在 Master 上执行构建
- 控制构建历史保留数量
- 清理旧数据
- 设置合适的堆内存大小
- 调整垃圾回收器
通过合理配置和优化,可以显著提升 Jenkins 的响应速度和稳定性,避免“卡顿”带来的开发效率下降问题。
✅ 建议: 定期对 Jenkins 环境进行性能评估和调优,充分发挥其在 CI/CD 流程中的作用。