CI/CD 流水线——从提交到生产环境

CI/CD 流水线,在一张交互式画布上讲清楚:提交、构建、测试、打包、部署到预发布与生产环境,以及决定发布去留的关卡。

CI/CD 把从一次代码提交到生产环境的路径自动化:持续集成对每一次改动做构建和测试,持续交付则把它打包并部署出去,中间由关卡决定这次发布是否健康到足以留下。

CI/CD 流水线——从提交到生产环境

The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.

How to read this visual

  • 五列从左往右读:提交、构建与测试、打包、部署、监控。
  • 顺着泳道跟住这次改动:它离开开发者,由 CI 服务器处理,停在制品仓库里,最后在部署目标上运行。
  • 两个决策都是关卡——任何一处走“否”,改动都会被送到一个明确的失败终点,而不是继续往前。

构建与测试

“开发者提交代码”让流程启动,“CI 服务器构建应用”和“运行单元测试与集成测试”是持续集成的活:每一次提交都被单独编译和测试。“所有检查都通过了吗?”正是让 CI 得名的那道关卡——不合格的提交会在“构建失败——修复后重新提交”处被挡下,不会污染制品流。

打包与部署

“打包制品并推送到制品仓库”产出不可变的、带版本号的构建产物——将来真正运行的就是这个东西。“部署到预发布环境并跑冒烟测试”在一个接近生产的环境里验证它,然后“部署到生产环境”把它交付出去。制品仓库这条泳道就是交接点:制品只构建一次,之后每个阶段都消费它,这正是部署出去的版本与测试过的版本完全一致的原因。

监控这道关卡

“部署后健康吗?”是最后一个决策:发布之后的指标、日志与告警决定的是“发布上线并处于监控之中”,还是“回滚到上一个可用版本”。回滚被画成一条真实的步骤,回到健康的终态,因为自动化回滚正是让快速部署变得安全的东西。

Key relationships and takeaways

  • CI 是任何东西交付之前的那道关卡:对每一次提交都构建和测试,把失败挡在源头。
  • 制品仓库里的制品只构建一次,到处运行——部署的可复现性全靠它。
  • 预发布环境在生产环境看到它之前,先在一个接近生产的环境里验证这份制品。
  • 部署后的健康状况才是真正的关卡——决定发布去留的是监控,不是部署脚本。
  • 没有回滚的流水线不适合自动化;这张画布把回滚画成了一条一等公民的路径。

When to use this visual

  • 在团队动手搭流水线之前,讲清楚持续集成和持续交付有什么不同。
  • 设计流水线:两道关卡指出了自动化必须停下、由判断(或回滚)接手的地方。
  • 审视一条已有的流水线——缺少健康关卡,就等于发布在没有决策的情况下运行。

运作方式

  1. 把你实际的流水线阶段画出来

    用你的 CI 真正会跑的阶段替换掉这些通用阶段——lint、容器构建、迁移、灰度——但要保证交付任何东西之前都有一道关卡。

  2. 写清楚你的检查项

    在测试方框上标注你真正运行的测试套件和安全扫描,以及“所有检查都通过了吗?”这道关卡除了单元测试之外还要求什么。

  3. 补上灰度分支

    在预发布环境与生产环境之间插入一个灰度步骤——把一小部分流量导到新版本,先看健康关卡的结果,再决定要不要全量发布。

  4. 写明回滚怎么做

    在回滚方框上注明它在你的系统里到底做什么——重新部署上一个镜像、恢复一份数据库备份——以及由谁或由什么来触发。

常见问题

CI 和 CD 有什么区别?

持续集成(CI)是自动构建并测试每一次提交的做法,让问题在被引入的那一刻就暴露,而不是等到发布时才浮现。持续交付(CD)接过 CI 的产物,把它通往部署的路径自动化——打包、预发布、发布——并由关卡决定什么时候是安全的。CI 是流水线里的第一道关卡,CD 是它之后的一切。

关卡在 CI/CD 流水线里为什么重要?

因为自动化拿掉了过去用来发现问题的人工检查点。流水线用决策把它们替换掉:测试关卡在一次失败的构建交付出去之前拦住它,健康关卡在一次糟糕的发布交付之后拦住它。图里把两者都画成决策形状,正是这个原因——一条流水线的可信程度,取决于它的关卡。

什么是回滚,流水线为什么需要它?

回滚就是在一次发布上线后失败时,把系统退回上一个已知可用的版本。流水线需要它,因为健康检查并不完美,生产环境也会以预发布环境从未展现过的方式出问题。自动化回滚正是让团队敢于频繁部署的东西——一次糟糕发布的代价,就变成一次回退,而不是一场事故。

制品仓库在其中处在什么位置?

制品仓库是流水线构建出的制品带着版本号存放的地方。之后的每个阶段——预发布、生产、回滚——都从制品仓库部署那一份一模一样的制品,绝不重新构建。这正是部署出去的代码与测试过的代码完全一致的原因,也正是回滚安全的原因:上一个可用版本还在制品仓库里。

在 QueryChart(FlowJam)中编辑这张图解

把上面这张 CI/CD 画布原样打开成你自己的图表,把各阶段改成你自己的流水线,再补上你真实的关卡。

在 QueryChart(FlowJam)中编辑这张图解

可视化图解中的更多内容