Jenkins 开源 CI/CD 平台概览与版本演进
Jenkins 是开源的自动化服务器 ,广泛用于持续集成(CI)与持续交付/部署(CD) 。本文介绍其核心概念、与 Hudson 的渊源、主要能力、Controller / Agent 架构、优劣与典型场景,并归纳从 1.x 、2.0 Pipeline 到 Weekly/LTS 双轨及近年云原生相关演进。具体行为与支持的 Java 版本以当前官方文档为准:https://www.jenkins.io/
目录
- [CI/CD 与 Jenkins 的定位](#CI/CD 与 Jenkins 的定位)
- 一条流水线的逻辑阶段(示意)
- [发展简史:从 Hudson 到 Jenkins](#发展简史:从 Hudson 到 Jenkins)
- 演进时间轴(示意)
- 核心能力
- 基本架构与触发路径
- [任务形态:Freestyle 与 Pipeline](#任务形态:Freestyle 与 Pipeline)
- [Declarative 与 Scripted Pipeline](#Declarative 与 Scripted Pipeline)
- 优势与挑战
- 典型应用场景
- 版本与演进脉络
- [Weekly 与 LTS 发布线](#Weekly 与 LTS 发布线)
- 近代特性与生态(概览)
- 生产环境检查清单(参考)
- 延伸阅读:与选型文档的衔接
- 免责声明
CI/CD 与 Jenkins 的定位
| 概念 | 说明 |
|---|---|
| 持续集成(CI) | 开发者频繁合并代码后,自动拉取、构建、测试,尽早发现集成问题,使主干尽量保持可发布状态。 |
| 持续交付/部署(CD) | 在 CI 通过的前提下,将制品自动或半自动部署到测试、预发、生产等环境;部署自动化程度与组织策略相关。 |
Jenkins 通过任务/流水线 编排上述步骤,并依托插件对接源码、构建工具、容器与通知渠道。
一条流水线的逻辑阶段(示意)
源码变更 / 定时 / 手动
拉取 SCM
编译构建
自动化测试
制品归档
部署 / 发布
实际阶段名称与是否自动部署,由 Jenkinsfile 或 Freestyle 配置 决定;F 常需配合审批、蓝绿/金丝雀策略与外围系统。
发展简史:从 Hudson 到 Jenkins
| 时间 | 事件 |
|---|---|
| 2004--2010 | Hudson 在 Sun Microsystems 内部由 Kohsuke Kawaguchi 等发起,用于改善 Java 构建稳定性,后开源并流行。 |
| 2010 | Oracle 收购 Sun 后,社区与 Oracle 在商标与治理上产生分歧。 |
| 2011 | 社区分叉:项目更名为 Jenkins (同年 Oracle 继续维护 Hudson 分支);此后 Jenkins 成为主流开源 CI 事实标准之一。 |
现今日常所说 Jenkins 均指 jenkins.io 上的这一条开源线。
演进时间轴(示意)
2004-2010 Hudson 起源与流行 2011 分叉为 Jenkins 2011-2016 1.x 插件与分布式成熟 2016 2.0 Pipeline / Multibranch 2016至今 Weekly + LTS 双轨 2017至今 Blue Ocean / JCasC / K8s Agent Jenkins 主线(简化)
核心能力
| 能力 | 说明 |
|---|---|
| 构建与测试 | 支持 Maven、Gradle、Ant 及 Shell/PowerShell 等脚本,覆盖 Java、Python、Go 等多语言。 |
| 源码管理 | 通过插件集成 Git、SVN 等,按分支/标签拉取后触发构建。 |
| 流水线即代码(Pipeline as Code) | 使用 Groovy DSL 编写 Jenkinsfile,将阶段、步骤、环境纳入版本库,便于评审与复用。 |
| 插件生态 | 大量插件扩展 Docker、Kubernetes、SonarQube、制品库、IM 通知等。 |
| 分布式执行 | **Controller(主节点)**调度任务,**Agent(从节点)**在 Windows/Linux/macOS 或容器中执行,并行扩展吞吐。 |
| 可视化与报告 | Web UI 展示构建历史、日志、测试结果趋势;支持邮件与企业 IM 通知。 |
| 安全 | 认证、授权矩阵、CSRF 等机制(具体能力取决于版本与插件配置)。 |
基本架构与触发路径
Controller
触发构建
Web UI / API
任务队列
插件与 Pipeline 引擎
Git / Webhook / 轮询
Agent 1
Agent 2
| 角色 | 说明 |
|---|---|
| Controller | 集中配置、插件、任务队列与 UI;也可在本机执行构建(内置 Agent)。 |
| Agent | 实际执行构建/测试步骤的节点,可为物理机、VM 或容器化 Agent。 |
历史文档中曾使用 Master / Slave 称谓,当前官方文档普遍采用 Controller / Agent。
任务形态:Freestyle 与 Pipeline
| 形态 | 特点 | 适用 |
|---|---|---|
| Freestyle / 传统任务 | 在 UI 中勾选步骤(Shell、Ant、Maven...),配置存 XML 等 | 简单任务、遗留项目、快速试验 |
| Pipeline | Jenkinsfile 描述阶段与步骤,可入库、做 Code Review |
团队规范、多环境、复杂编排 |
| Multibranch Pipeline | 按仓库分支/PR自动创建流水线 | GitFlow、特性分支密集的团队 |
Declarative 与 Scripted Pipeline
| 类型 | 特点 |
|---|---|
| Declarative Pipeline | pipeline { stages { stage { steps } } } 结构固定,校验严格,适合规范团队与新手入门 |
| Scripted Pipeline | node { ... } 内任意 Groovy,灵活,适合复杂逻辑与库封装 |
二者可结合使用;团队宜在文档中约定默认风格。
优势与挑战
| 优势 | 挑战 |
|---|---|
| 开源、社区大、案例与资料多 | Pipeline Groovy 与插件组合对新手学习曲线陡 |
| 跨平台(运行于 JVM) | 插件版本矩阵需持续维护,升级需回归 |
| 插件覆盖广、可定制强 | 默认/经典 UI 的现代化程度常弱于部分新生代产品 |
| 适合从中小团队到企业级多种规模 | 生产环境需专门关注安全加固、备份与权限 |
典型应用场景
| 场景 | 示例 |
|---|---|
| 后端 / 微服务 CI/CD | 编译、单测、镜像构建、推送仓库、部署到 K8s/VM |
| 前端 / 移动端 | npm build、移动端打包、上传测试分发平台 |
| 容器与云原生 | 构建镜像、调用 Kubernetes 插件、滚动发布 |
| 运维自动化 | 定时巡检、备份、清理等脚本化任务(需注意权限与审计) |
版本与演进脉络
Hudson 时期(约 2004--2011)
Hudson 解决 Sun 内部及社区的持续构建需求,与当时 CruiseControl 等相比更易用,曾获 JavaOne Duke's Choice 等奖项;后因治理分叉为 Jenkins 与 Hudson 两线。
Jenkins 1.x(约 2011--2016)
奠定 Web UI、插件模型、分布式 Master-Agent(现称 Controller-Agent) ;大量任务以 Freestyle 等形式配置,配置可落盘为 XML 等。
Jenkins 2.0 与 Pipeline(约 2016 前后)
- Pipeline :用
Jenkinsfile(Groovy)描述完整 CD 流水线。 - Multibranch Pipeline:按 Git 分支自动创建流水线。
- UI 与安全默认策略持续改进。
产品定位从「任务运行器」强化为「流水线自动化平台」。
双轨发布(约 2016 至今)
见下节 Weekly / LTS。
体验与云原生(约 2017 至今)
- Blue Ocean:更直观的流水线可视化 UI(插件形态)。
- Declarative Pipeline :相对 Scripted Pipeline 更规整的声明式语法。
- Configuration as Code(JCasC):用 YAML 等描述系统级配置。
- Jenkins X :面向 Kubernetes / GitOps 的延伸项目(演进过程以官方仓库为准)。
- JVM 升级 :核心逐步要求 Java 11+ ,并向 Java 17 / 21 等 LTS 对齐;升级前需核对 插件兼容性。
- Kubernetes 集成:动态 Agent、在云环境中弹性拉起构建 Pod 等模式普及。
- 可观测性 :如 Prometheus 指标插件等,便于与监控栈对接。
Weekly 与 LTS 发布线
| 发布线 | 特点 | 典型受众 |
|---|---|---|
| Weekly | 发布频繁,包含最新功能与修复 | 愿意跟随新版本、自行验证的团队 |
| LTS(Long-Term Support) | 固定基线版本,长期安全与修复补丁(约每数周一补丁节奏的量级,以公告为准) | 生产环境优先选用 LTS |
升级 LTS 前应阅读 changelog 与 升级指南 ,并在预发 Controller 上验证插件集。
近代特性与生态(概览)
| 方向 | 内容 |
|---|---|
| 流水线 | Scripted / Declarative Pipeline、Jenkinsfile 入库与 Code Review |
| 配置治理 | JCasC、制品与密钥凭据管理 |
| 运行环境 | 容器化 Controller/Agent、K8s 动态 Agent |
| 替代与并存 | 团队也可能采用 GitLab CI、GitHub Actions、Tekton 等;Jenkins 仍是自托管、强插件定制场景常见选择 |
生产环境检查清单(参考)
| 项 | 建议 |
|---|---|
| 版本 | 生产使用 LTS;升级前在沙箱 Controller 全量插件冒烟 |
| 备份 | 定期备份 JENKINS_HOME(任务配置、插件、密钥库) |
| 凭据 | 使用 Credentials Binding ,避免在 Jenkinsfile 明文写密钥 |
| 权限 | 启用 RBAC,按角色最小授权;审计敏感 Job |
| 网络安全 | Controller 不暴露公网裸端口;Agent 与 Controller 间 TLS/专线 |
| 插件 | 只装必要插件,关注 安全通告,及时更新 |
| CSRF / 反向代理 | 按官方文档配置 反向代理 与 CSRF 相关项 |
延伸阅读:与选型文档的衔接
与 GitHub Actions、GitLab CI、Tekton、Argo CD 等如何取舍,见同目录 CI/CD 平台选型对比:与 Jenkins 同类的方案。
免责声明
许可证以 Jenkins 发行版及插件各自声明为准;生产部署请遵循官方安全与升级文档。
主题:Jenkins、CI/CD、Pipeline、Controller/Agent、LTS。