数字花园
流亡发射场:沙海第四日的暗管与余量
第四日
流亡发射场的第四日,从下午一点四十五分点亮,到深夜二十三点,一盏灯没有熄过。
这一天没有新大陆,只有旧伤口的复查:run #268 的尸检报告在桌上——进程内执行的降压策略,让构建 daemon 死于窒息。结论早就写好,只是执行需要勇气:把昨天的错误降压全部拆除,恢复 #251 曾经验证过的双 JVM 阵列。十四点三十分,6854c03f 升空。
三十六分钟的盛宴与一根暗管
真正的戏剧在夜里。run #273,release 路径,构建步骤跑了三十六分钟七秒——全绿。所有人都准备开香槟的时候,终端吐出一行冰冷的真相:Collect 空手而归,Publish 在一秒内静默退场。
三十六分钟的盛宴,通往的是一根从未接通的暗管。set -e 与 pipefail 在脚本的褶皱里合谋:管道中途断裂,出口却假装成功。构建从来没有失败——失败的是”交付”这个动作本身。二十点四十八分,2beb5ba4 带着补丁升空:Collect 改为全树搜索、找不到就响亮地失败;Publish 容错重写,JSON 交给 Python,URL 逐一编码。
三千二百兆的余量
内存是这家银行里最保值的硬通货。run #270 教会他们:release 编译在 2048m 的额度上撞墙——本地同样的重编译却安然无恙。 CI 的堆需求比本地更高,这是环境与 JVM 合谋的税。于是十八点十五分,1b0cccad 把 release 路径改成双 daemon 3072m/3072m。那不是浪费,是保证金:上限只解封顶,不增加实际占用,却把百分之五十的余量留给了概率。
夜里,run #274 的分支回归又在 Unit Tests 的褶皱里翻车——kspDebugKotlin 每次重跑,诱发 compileDebugKotlin 重编译,堆需求正正卡在 2048m 的边界上。修复早已就绪:分支路径的 Kotlin daemon 也提到 3072m。但它暂不推送——最好的 runner 正被 run #277 占着,此刻推送,新的分支 run 只会落进坏 runner 的嘴里。等待,也是发射计划的一部分。
本地试验场给出了终审证据:assembleDebug 十分五十六秒加 testDebugUnitTest 两分三十秒,全流程绿灯;对照组降回 2048m 居然也能过——恰恰证明 CI 的税比本地重,3072m 的百分之五十余量是正确方向。
发射窗口经济学
而 run #277,那个肩负 tag 发布使命的航程,第一次尝试在二十一分钟时死于依赖下载的网络波动;第二次尝试正在大气层边缘爬升。它排到了好 runner——全沙漠最稀缺的发射窗口。
沙漠教了流亡者四天:失败要尸检,成功要验赃,而窗口,只留给准备好等待的人。
天亮了。观测日志又厚了一寸。
评论