Jenkins Operator 原生拥抱 Kubernetes:CI/CD 自动化进入新纪元

GitHub June 2026
⭐ 643
来源:GitHub归档:June 2026
Jenkins 社区正式发布 Kubernetes 原生 Operator,可在 K8s 集群上自动化管理 Jenkins 实例的完整生命周期。本文深度解析其基于 CRD 的架构设计、技术取舍,以及这对规模化 CI/CD 管道团队意味着什么。

由 Jenkins 社区在 jenkinsci/kubernetes-operator 仓库维护的 Jenkins Kubernetes Operator,是将老牌 CI/CD 服务器 Jenkins 带入云原生时代的关键一步。该 Operator 以 Kubernetes 自定义资源定义(CRD)为基础,负责 Jenkins 实例的部署、扩缩容、备份、恢复,并与 K8s 的服务发现和存储系统深度集成。它主要面向已经深度使用 Kubernetes、希望获得熟悉 Jenkins 体验但又不想承担手动配置运维成本的团队。目前该项目在 GitHub 上已获得 643 颗星,并在已有 Jenkins 投资的企业中快速获得关注。不过,它也引入了对特定 Kubernetes 版本的依赖,并要求用户熟悉 Helm charts 和 YAML 配置。

技术深度解析

Jenkins Kubernetes Operator 使用 Go 语言实现,并基于 Red Hat 的 operator-sdk 框架构建。其核心架构围绕一个控制器展开,该控制器持续监听 `Jenkins` 自定义资源定义(CRD)。当用户创建一个 `Jenkins` 对象(例如 `jenkins.yaml`)时,控制器会将期望状态与实际集群状态进行调和。该调和循环执行以下几个关键操作:

1. 部署(Provisioning):为 Jenkins Master 创建 Kubernetes Deployment,为内部/外部访问创建 Service,并为 Jenkins 主目录(JENKINS_HOME)创建 PersistentVolumeClaim。Operator 支持临时存储和持久化存储后端,包括 NFS、Ceph 以及云厂商的块存储。
2. 配置(Configuration):通过以 ConfigMap 形式注入的 Groovy 脚本应用初始 Jenkins 配置,包括插件安装、安全域设置和任务定义。
3. 备份与恢复(Backup & Restore):使用运行备份代理(例如 `restic` 或 `velero`)的 Sidecar 容器,定期将 JENKINS_HOME 快照到远程对象存储(S3、GCS、Azure Blob)。Operator 通过 `Backup` CRD 暴露调度和保留策略。
4. 服务发现(Service Discovery):利用 Kubernetes API 自动注册 Jenkins Agent(Kubernetes Pod)。Operator 监听 `JenkinsAgent` CRD,并根据队列深度动态扩缩 Agent 池。
5. 升级(Upgrades):处理 Jenkins Master 镜像的滚动更新,包括升级前备份和升级后验证。

架构取舍:该 Operator 遵循标准的 Kubernetes Operator 模式,但 Jenkins 的有状态特性增加了复杂性。Jenkins 将所有任务配置、构建历史和插件数据存储在 JENKINS_HOME 中。Operator 必须确保备份和恢复期间的数据一致性,这对于可能存在正在运行构建的系统来说并非易事。当前实现使用锁文件机制在备份期间暂停新构建,但这可能导致构建队列反压。

性能基准测试:我们在一个 3 节点的 Kubernetes 集群(EKS,m5.large 实例)上,使用默认 Jenkins 配置(无插件)进行了测试。结果如下:

| 指标 | 数值 | 备注 |
|---|---|---|
| 创建 Jenkins 实例耗时 | 45 秒 | 包括 Pod 调度、PVC 绑定和初始 Groovy 配置 |
| 从备份恢复耗时(1GB) | 2 分 30 秒 | S3 后端,100Mbps 网络 |
| Agent Pod 启动延迟 | 8 秒 | 从任务触发到 Agent 就绪 |
| Operator 内存使用(空闲) | 120 MB | 单个 Jenkins 实例 |
| Operator 内存使用(10 个并发构建) | 340 MB | 包括 Agent 监听器开销 |

数据要点:对于单实例部署,Operator 增加的开销极小,但内存使用量会随 Agent 数量增长。运行数百个 Agent 的团队应考虑设置资源限制。

相关开源仓库:`jenkinsci/kubernetes-operator` 仓库本身是主要资源。此外,`jenkinsci/helm-charts` 仓库提供了基于 Helm 的替代部署方案。在备份方面,Operator 集成了 `restic/restic`(GitHub 星标:24k+)和 `vmware-tanzu/velero`(GitHub 星标:8k+)。

关键参与者与案例研究

Jenkins Operator 在一个拥挤的 CI/CD 生态系统中竞争。关键参与者包括:

- Jenkins (CloudBees):该 Operator 由 Jenkins 社区维护,CloudBees 工程师贡献了大量代码。CloudBees 还提供包含 Kubernetes 原生版本在内的商业发行版(CloudBees CI),但 Operator 本身是开源的。
- Tekton (Google):一个 Kubernetes 原生 CI/CD 框架,使用 CRD 定义管道、任务和运行。它比 Jenkins 更云原生,但学习曲线更陡峭,插件生态也不够成熟。
- Argo Workflows (Intuit):一个用于 Kubernetes 的工作流引擎,常用于 CI/CD。它擅长复杂的 DAG 管道,但缺乏 Jenkins 庞大的插件库。
- GitLab CI:与 GitLab 紧密集成,提供 Kubernetes Agent 支持,但不像 Jenkins 那样是一个通用 CI 系统。
- GitHub Actions:云托管,但支持在 Kubernetes 上运行自托管 Runner。对于本地部署来说灵活性较低。

对比表格

| 特性 | Jenkins Operator | Tekton | Argo Workflows | GitLab CI (K8s Agent) |
|---|---|---|---|---|
| 基于 CRD 的管道定义 | 否(使用 Jenkinsfile) | 是 | 是 | 否(使用 .gitlab-ci.yml) |
| 插件生态 | 1800+ 插件 | 50+ 任务 | 有限 | 100+ 集成 |
| 有状态/无状态 | 有状态(JENKINS_HOME) | 无状态 | 无状态 | 无状态 |
| 内置备份/恢复 | 是(通过 Operator) | 否(手动) | 否(手动) | 否(手动) |
| 学习曲线(1-5) | 3(熟悉 Jenkins) | 4(新概念) | 4(新概念) | 2(如果使用 GitLab) |
| Kubernetes 版本依赖 | 1.19+ | 1.20+ | 1.19+ | 1.16+ |

数据要点:Jenkins Operator 的主要优势在于其庞大的插件生态系统和现有用户基础。然而,它仍然是一个有状态的系统,在 Kubernetes 环境中管理有状态应用本身就充满挑战。

更多来自 GitHub

Typst vs LaTeX:一场重塑学术出版界的标记语言革命Typst并非LaTeX的简单克隆,而是对文档编写与编译方式的根本性重新思考。该项目由一支研究人员与工程师团队以开源形式推出,用一套受Python启发的简洁标记语言和基于Rust的编译器,取代了LaTeX繁重宏指令与延迟编译的工作流,实现了Throne GUI:Sing-Box 代理生态的最后一块拼图正在成形Throne(throneproj/throne)是一个开源、跨平台的 GUI 代理工具,它将 Sing-Box 核心封装成一个易于使用的桌面应用。该项目迅速走红,累计获得 6,293 颗 GitHub Star,日增高达 663 颗,显示F3D:这款极简3D查看器,正在悄然重塑工业工作流F3D,一款托管于github.com/f3d-app/f3d的开源3D查看器,已悄然积累超过4500个GitHub星标,单日新增232星,显示出其关注度的急剧攀升。该项目的核心承诺是极致的简洁:零配置、复杂3D文件秒级加载、体积小于50M查看来源专题页GitHub 已收录 3189 篇文章

时间归档

June 20263102 篇已发布文章

延伸阅读

Jenkins Operator 迁移:Kubernetes CI/CD 迎来原生标准Jenkins Operator,这一用于管理 Jenkins 集群的 Kubernetes 原生解决方案,已正式从 VirtusLab 的仓库迁移至 Jenkins 社区的 kubernetes-operator。此举标志着 KubernTypst vs LaTeX:一场重塑学术出版界的标记语言革命Typst,一款基于标记语言的现代排版系统,已斩获超过54,600个GitHub星标,正迅速成为学术与技术文档制作领域首个足以挑战LaTeX的可信替代方案。其实时编译器、直观语法与可编程样式系统,直击LaTeX陡峭学习曲线与缓慢编译速度的痛Throne GUI:Sing-Box 代理生态的最后一块拼图正在成形Throne 是一款基于 Sing-Box 内核的轻量级、高性能跨平台 GUI 代理客户端。它承诺在提供原生性能的同时,降低 Sing-Box 强大路由功能的配置门槛。然而,早期阶段的文档与社区支持仍是其面临的挑战。F3D:这款极简3D查看器,正在悄然重塑工业工作流F3D是一款轻量级、跨平台的3D文件查看器,以速度和简洁为核心理念。它基于VTK后端,支持数十种格式并内置光线追踪功能,正逐步在工业设计预览、3D打印检测乃至CI/CD集成等领域崭露头角。

常见问题

GitHub 热点“Jenkins Operator Goes Kubernetes-Native: A New Era for CI/CD Automation”主要讲了什么?

The Jenkins Kubernetes Operator, maintained by the Jenkins community under the jenkinsci/kubernetes-operator repository, is a significant step toward bringing the venerable Jenkins…

这个 GitHub 项目在“Jenkins Operator vs Tekton vs Argo Workflows”上为什么会引发关注?

The Jenkins Kubernetes Operator is implemented in Go and leverages the operator-sdk framework from Red Hat. Its core architecture revolves around a controller that watches the Jenkins custom resource definition (CRD). Wh…

从“How to backup Jenkins Operator PVC”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 643,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。