凌晨一点三十七分,我盯着屏幕上的发布进度条,从99%跳到100%。循环了三次,最后显示“应用部署成功”。我长舒一口气,但没敢欢呼,因为上一周同一时间,同样的过程烧掉了两台服务器。版本发布是件诡异的事——它既是技术动作,又是一场关于信仰的仪式。我在想,明明一切都已经被脚本编排得井井有条,为什么每次点下那个按钮时,心跳还是会漏半拍?后来我想明白了,因为人不是机器,我们总需要一个可感知的瞬间来确认“过去结束,新的开始”。
在还没用持续集成的那会儿,发版是大事。我们提前一周冻结代码,排期测试,写发布文档,甚至开个发布“誓师大会”。每次发布都像送亲人进手术室,所有人在会议室里盯着一个破投影仪,谁都不敢咳嗽。那时候的版本号是刻在石头上的,出了错就要全组加班去填坑。现在用流水线,一条命令,一次点击,代码就能上生产。我甚至可以在发布过程中去泡杯咖啡。说实话,是轻松了,但也少了点什么。以前发布成功后的那种成就感,像终于跑完马拉松;现在更像按了自动售卖机,哐当掉出一罐可乐,虽有满足感,但瞬间就忘了。
我有个可能不太合时宜的观点:版本号不是简单的计数,而是产品向世界做出的承诺。语义化版本号(major.minor.patch)其实是一套可量化的后悔机制——升级大版本,意味着我们承认上一代有裂缝,需要一次故意的破裂来重新定向。而现代有些团队为了刷发布频率,连版本号都懒得维护,或者随便用日期和哈希串替代。这有点像用快餐取代年夜饭,效率够高,但缺失了连接。版本发布应该保留一点“表演性”,哪怕只是按下按钮时心里默念一声“拜托”。这不是封建迷信,而是人类在面对不确定性时自己的分寸感。
我不是反对自动化。恰恰相反,正因为自动化把我们从重复劳动里解放出来,我们才有余力去做点“多余的事”。比如在发布成功之后,在群里发个带烟花Emoji的通知,或者在团队里开一瓶不算贵的香槟。这些微小的仪式感,其实是在对抗规模化带来的虚无。版本发布,最终是人和人之间协作的证明,是产品呼吸的瞬间。别把它变成纯粹的黑箱操作。谁知道呢,也许再过十年,AI会替我们发布每一个版本,到那时候,我们连按钮都不需要按了,但我会怀念那个手抖的时刻。