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
- 在团队动手搭流水线之前,讲清楚持续集成和持续交付有什么不同。
- 设计流水线:两道关卡指出了自动化必须停下、由判断(或回滚)接手的地方。
- 审视一条已有的流水线——缺少健康关卡,就等于发布在没有决策的情况下运行。
运作方式
把你实际的流水线阶段画出来
用你的 CI 真正会跑的阶段替换掉这些通用阶段——lint、容器构建、迁移、灰度——但要保证交付任何东西之前都有一道关卡。
写清楚你的检查项
在测试方框上标注你真正运行的测试套件和安全扫描,以及“所有检查都通过了吗?”这道关卡除了单元测试之外还要求什么。
补上灰度分支
在预发布环境与生产环境之间插入一个灰度步骤——把一小部分流量导到新版本,先看健康关卡的结果,再决定要不要全量发布。
写明回滚怎么做
在回滚方框上注明它在你的系统里到底做什么——重新部署上一个镜像、恢复一份数据库备份——以及由谁或由什么来触发。
常见问题
CI 和 CD 有什么区别?
持续集成(CI)是自动构建并测试每一次提交的做法,让问题在被引入的那一刻就暴露,而不是等到发布时才浮现。持续交付(CD)接过 CI 的产物,把它通往部署的路径自动化——打包、预发布、发布——并由关卡决定什么时候是安全的。CI 是流水线里的第一道关卡,CD 是它之后的一切。
关卡在 CI/CD 流水线里为什么重要?
因为自动化拿掉了过去用来发现问题的人工检查点。流水线用决策把它们替换掉:测试关卡在一次失败的构建交付出去之前拦住它,健康关卡在一次糟糕的发布交付之后拦住它。图里把两者都画成决策形状,正是这个原因——一条流水线的可信程度,取决于它的关卡。
什么是回滚,流水线为什么需要它?
回滚就是在一次发布上线后失败时,把系统退回上一个已知可用的版本。流水线需要它,因为健康检查并不完美,生产环境也会以预发布环境从未展现过的方式出问题。自动化回滚正是让团队敢于频繁部署的东西——一次糟糕发布的代价,就变成一次回退,而不是一场事故。
制品仓库在其中处在什么位置?
制品仓库是流水线构建出的制品带着版本号存放的地方。之后的每个阶段——预发布、生产、回滚——都从制品仓库部署那一份一模一样的制品,绝不重新构建。这正是部署出去的代码与测试过的代码完全一致的原因,也正是回滚安全的原因:上一个可用版本还在制品仓库里。
在 QueryChart(FlowJam)中编辑这张图解
把上面这张 CI/CD 画布原样打开成你自己的图表,把各阶段改成你自己的流水线,再补上你真实的关卡。