专业书籍精读 · 持续交付 · 第 5 章

部署流水线剖析

Continuous Delivery · Ch 5 · Jez Humble & David Farley · 2010

EN →

这一章讲什么?

你手机里的 App 隔三差五就更新一次。从某个程序员改完一行代码,到这行代码真的跑在你手机上,中间要走一段路。《持续交付》第 5 章讲的就是这段路该长什么样——作者管它叫部署流水线,这也是整本书的心脏。

打个比方

把它想成工厂的质检流水线:一次代码改动就是一件刚下线的货,它得依次经过几个检验工位。越靠前的工位越快越便宜(瞄一眼外观、称个重,几分钟搞定);越靠后的越慢越贵(拆开做全套检测,得等大半天)。任何一个工位亮红灯,这件货当场停住,绝不许往下走。

这里有个反直觉的地方:这条流水线的目的不是证明「这版能发」,而是尽早、尽便宜地证明「这版不能发」。所以最快最糙的检查排在最前面——坏消息越早知道越省钱。

旧世界为什么难

从前发新版本靠「发布日」:攒上三个月的改动,挑个周五半夜,一屋子人照着一份几十页的操作手册手工敲命令,敲错一步就通宵回滚。更糟的是,测试用的那台机器和真正对外的机器长得根本不一样,所以「测试环境测过了」根本不算数。于是没人敢发版,越不敢发就攒得越多,越多就越容易出事——恶性循环。

它靠三条规矩把这事掰直

第一,只装配一次。检验合格的那一箱,就是最后发出去的那一箱,中途绝不重新做一箱。听着像废话,可老做法恰恰是每换一个环境就重新编译打包一次——结果上线的那个版本,其实谁也没测过。

第二,每一站用同样的动作。装到测试机上和装到线上机器上,用的是同一套自动脚本,区别只在「贴的标签」(各环境的配置)不同。装完还要立刻做一次自检:真的起来了吗?该连的东西都连上了吗?

第三,红灯就停线。哪一站亮红灯,这批货立刻停住,全组先把灯修绿再干别的——不许绕过去,也不许「先记着回头再说」。

带来了什么

三条合起来,发版就从「一场大型事故演习」变成「按个按钮」。而且任何时刻你都能一眼看到:这个版本走到哪一站了、卡在哪、能不能上线。亚马逊、Etsy 这些公司之所以敢一天上线几十上百次,靠的就是把这条路修好了。

当然它有代价:这条流水线本身要人搭、要人养,刚开始你会觉得更慢更烦、红灯还老响,好处得等到发布次数多起来才显出来。

一句话记住

把「从改代码到上线」修成一条固定的自动流水线:只装配一次每站动作相同红灯就停线。它不为证明你行,而是让不行的版本尽早、尽便宜地被拦下来——于是发布不再是大事,而是一个按钮。

想进到具体阶段划分、时间量级和示意图? → 切到精读版