⚰️ 前言:受够了 Jenkins 的“插件地狱”
你是否有过这样的经历:
- 为了升级一个 Jenkins 插件,导致整个流水线崩了,甚至 Jenkins 起不来了。
- 运维在 Jenkins 上配了一堆 Shell 脚本,只有他自己看得懂,离职后没人敢动。
- 生产环境的配置和 Git 仓库里的代码不一样,出现了神秘的**“配置漂移”**。
在虚拟机时代,Jenkins 是当之无愧的 CI/CD 霸主。但在Kubernetes 云原生时代,继续用 Jenkins 做部署(CD),简直就是开着拖拉机上高速。
今天,我要大胆说一句:对于 K8s 部署,Jenkins 该退休了。
未来属于GitOps。我们将用ArgoCD + Kustomize搭建一套现代化的发布系统,实现**“代码一提交,集群秒更新”**。
⚔️ 核心对决:Push 模式 vs Pull 模式
为什么说 Jenkins 落后了?
Jenkins 采用的是Push 模式:CI 服务器需要持有 K8s 集群的kubeconfig(上帝权限),一旦 CI 服务器被黑,你的生产环境就完了。
ArgoCD 采用的是Pull 模式 (GitOps):
ArgoCD 作为 Agent 部署在 K8s 集群内部。它不需要上帝权限,它只做一件事:盯着 Git 仓库。
- Git 仓库里描述了“期望状态”。
- K8s 集群里运行的是“实际状态”。
- 一旦两者不一致,ArgoCD 立即把集群同步 (Sync)成 Git 里的样子。
架构对比图:
GitOps 的降维打击:
- 安全性:CI 只需要修改 Git 文件,不需要 K8s 权限。
- 可回滚:Git 回退一个 Commit,集群自动回滚。Git 就是你的时光机。
- 防漂移:有人偷偷用
kubectl改了线上配置?ArgoCD 会立刻发现并把它改回来!
🛠️ 实战环节:ArgoCD + Kustomize 落地
很多同学用了 ArgoCD 还在写一大堆重复的 YAML。这时候就需要Kustomize出场了。
它通过Base (基准) + Overlay (覆盖)的方式,让你一套配置复用到开发、测试、生产环境。
1. 项目结构设计
告别 Helm 的复杂模板,Kustomize 的结构清晰可见:
deploy/ ├── base/ # 通用配置 │ ├── deployment.yaml │ ├── service.yaml │ └── kustomization.yaml └── overlays/ # 环境差异化配置 ├── dev/ │ ├── kustomization.yaml │ └── patch-replicas.yaml (开发环境 1副本) └── prod/ ├── kustomization.yaml └── patch-replicas.yaml (生产环境 3副本)2. 定义 Application (ArgoCD 的核心)
我们不需要去 Web 页面点点点,直接写一个 YAML 文件告诉 ArgoCD 要管哪个项目。
apiVersion:argoproj.io/v1alpha1kind:Applicationmetadata:name:my-app-prodnamespace:argocdspec:project:defaultsource:repoURL:'https://github.com/my/repo.git'targetRevision:HEADpath:deploy/overlays/prod# 指向生产环境配置destination:server:'https://kubernetes.default.svc'namespace:my-app# 关键:开启自动同步和自愈syncPolicy:automated:prune:true# Git里删了文件,集群也自动删selfHeal:true# 防止有人手动改集群3. 实现“秒级发布”
所谓的秒级发布,其实就是修改镜像 Tag的过程。
我们可以在 CI 流水线(比如 GitHub Actions 或 纯构建用的 Jenkins)的最后一步,运行以下命令:
# 进入配置库cddeploy/overlays/prod# 使用 kustomize 修改镜像 Tagkustomize editsetimage my-app=my-registry/my-app:v2.0# 提交到 Gitgitcommit -am"Update image to v2.0"gitpush就在你git push成功的那一秒,ArgoCD 检测到了变化,立即驱动 K8s 进行滚动更新。
没有复杂的脚本,没有 SSH 连接,一切都是那么丝滑。
💣 灵魂拷问:Jenkins 真的没用了吗?
我不做标题党,客观看待:
- CI (持续集成):Jenkins 依然很强。编译 Java、打 Docker 镜像、跑单元测试,Jenkins / GitLab CI 依然是主力。
- CD (持续部署):请把这块地盘让给 ArgoCD。让专业的人做专业的事。
最佳实践公式:
Jenkins (负责打包) + Git (作为源头) + ArgoCD (负责交付)
📝 总结
从脚本为王,到基础设施即代码 (IaC),再到现在的 GitOps。
技术的演进方向永远是:更声明式、更自动化、更安全。
如果你还在维护那些几百行的 Jenkins Pipeline 脚本,每天提心吊胆怕发布失败,不妨试试 ArgoCD。
相信我,一旦你体验过**“提交代码即上线”**的快感,你就再也回不去 Jenkins 的时代了。