一、CI/CD 到底是什么?我为什么觉得它值一套课?

先问一个直白的问题:你每天花多少时间在“让代码跑起来”这件事上?我见过不少团队,开发半天,部署两天。代码写好了,却卡在整合、测试、发布这些环节上。说白了,CI/CD 就是把这些重复劳动自动化掉。

我个人习惯把 CI/CD 理解成“流水线”——你只管提交代码,剩下的事让工具去完成。但这不只是省时间这么简单。我在项目里踩过很多坑,比如一次合并冲突直接让整个版本延期两周。后来才明白,真正的价值是让团队能快速、安全地交付。

1.1 持续集成(CI)——别让代码“攒”着

持续集成,核心就是频繁地把代码合并到主干。有多频繁?我建议每天至少一次。你不会想把一周的工作量攒到周五下午一次性提交——那简直是噩梦。

CI 的核心收益:

  • 尽早发现集成错误,而不是等到上线前
  • 每次提交自动触发构建和单元测试
  • 让代码库始终保持在一个健康的状态

举个例子:我们之前有个微服务项目,20多人同时开发。如果不做 CI,每次合并就像开盲盒。后来上了 Jenkins 跑流水线,每次提交自动编译+跑 2000 多个单元测试。碰见失败立刻通知,问题根本过不了夜。

1.2 持续交付(CD)——随时准备上线

持续交付的意思,是让你的代码每次都能安全地部署到生产环境。这不代表你每次都要发布,而是说你随时可以发布。我记得有一回客户突然要求第二天早上上线一个紧急功能,我们因为有完整的 CD 流水线,直接合并分支、跑完自动测试、滚动部署,半小时搞定。要不是有这套东西,凌晨三点还在人工操作。

维度 没有 CD 有 CD
部署频率 月/季度 周/天
发布风险 高(一步到位) 低(小批量灰度)
回滚速度 小时级 分钟级
团队士气 怕发版 想发就发

1.3 持续部署——更极致的自动化

持续部署是在持续交付之上再加一把火:全部自动化。没有人工点击“确认上线”这个按钮。什么情况适合?测试覆盖率极高、灰度机制成熟、监控体系完善。我不建议新手团队一上来就搞持续部署。先跑通持续交付,有足够的自信再说。

注意: 持续部署不等于“随便发”。你需要做好蓝绿部署或者金丝雀发布的预案。我曾经在一个客户那里看到,因为没配自动回滚,持续部署直接把有 Bug 的版本推到了 100% 的节点,线上挂了 20 分钟。那场面……后来加了健康检查和自动回滚,才算踏实。

1.4 核心流程长什么样?

下面这张图是我自己整理的一套标准流程,你一看就明白。其实每家公司的流水线细节不一样,但骨架差不多。

CI/CD 核心流程示意图 📝 代码提交 🔧 自动构建 🧪 单元测试 🔗 集成测试 🚀 部署预发 🌐 生产部署 📊 监控反馈 持续集成 → 持续交付 → 持续部署

1.5 常用工具怎么选?

工具这东西,没有最好只有最合适。我统计了几个主流选手的对比,你挑的时候可以参考。

工具 类型 适合场景 我踩过的坑
Jenkins 自托管 高度定制、插件丰富 插件升级容易炸,建议锁版本
GitLab CI SaaS / 自托管 GitLab 生态用户 跑大量并行 job 时注意 Runner 资源
GitHub Actions SaaS 开源项目、中小团队 免费额度用起来很快,得规划
CircleCI SaaS 速度优先的团队 缓存机制坑多,要仔细调
ArgoCD Kubernetes 原生 K8s 部署 GitOps 学习曲线略陡,但值得

我的建议: 如果你从零开始,可以先选 GitHub Actions 或 GitLab CI,因为上手快。等团队成长到 30 人以上,再考虑 Jenkins 定制化或者 ArgoCD 的 GitOps 方案。别一开始就铺大摊子,容易烂尾。

1.6 为什么把 CI/CD 放在第一章?

嗯,这个问题我问过自己很多次。因为后面的 29 章,每章都是建立在“自动化交付”这个信念上的。如果你不信 CI/CD 能带来实际价值,后面那些配置、优化、安全加固你根本坚持不下去。

我记得有个初创公司,团队 8 个人,起初觉得“我们项目小,手动部署就行”。结果三个月后,代码库从 2 万行涨到 20 万行,手动部署一次要 4 个小时,还总出错。后来我帮他们搭了一套极简流水线,30 分钟搞定整个流程。老板当场说:“早该弄的。”其实不早不晚,意识到问题就是最好的时机。

说实话,CI/CD 最大的好处不是省时间,而是让你敢于修改代码。因为你心里有底:就算改坏了,流水线会拦着,会回滚。这种安全感,才是团队从“怕改动”进化到“快迭代”的基石。

一句话总结: CI/CD 不是工具,不是脚本,而是一种让软件交付变成可控的、可重复的、可审计的流程信仰。后面我们会一点点把这信仰落地到每一行配置、每一次构建中。