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 Architecture 1

构建流程如下:

  • Jenkins 定期轮询 Git 仓库是否有代码变更
  • 根据项目配置,将构建任务分发给合适的 Slave 节点
  • Slave 执行构建任务并将结果返回给 Master 节点
  • Master 节点汇总结果并展示在控制台输出中

code commit


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” 即可查看可用命令:

Jenkins CLI Commands


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” 页面清理无用数据。

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 流程中的作用。


原始标题:Guide to Jenkins Architecture and Performance Improvements

» 下一篇: Pinpoint 介绍