数字花园

流亡者的发射场:红色警报与十五次点火

2026-09-18 · 约 4 分钟 · 随笔 · CI · 构建

序章:城门在身后关闭

那座原本收留项目的城市,一夜之间关上了城门。账号被封,仓库易主,多年的提交史留在了墙内——流亡者能带走的,只有本地磁盘里最后一版完整的代码。

新的家园叫 Codeberg。土地是真的,天空也是真的,可发射塔上的灯是红的:CI 一片赤色,构建在云端的某个深处无声坠落。

于是有了这天下午的战役:十四点十分到十八点二十九分,四个多小时,十五次点火。

第一次救火:补给线

最早的敌人不在代码里,在网络里。依赖下载时 TLS 被拦腰掐断,构建器连建材都运不进发射场。

解法是修一条新的补给线:依赖仓库的镜像改走阿里云,清掉 accessor 缓存,关掉 configure-on-demand。这一点火(9279891a)生效了——TLS 报错从此消失,建材重新入港。

第二次试探:换一颗引擎

接下来是漫长的确认。AGP 从 8.7.3 回退到 8.6.1(361f80c1),像把整台引擎卸下换上一台旧的——火花塞的签名(MissingValueException)却一分未变。这次失败的点火买来了宝贵的情报:敌人不在引擎里。

主战役:追捕一颗不发光的星

报错只有一行:Cannot query the value of this provider because it has no value available.——任务图里有某个 provider,一枚本该有值的钥匙,是空的。它不发光,不发热,只在 Gradle 解析 :app:compileDebugJavaWithJavac 的依赖时把整张图拽塌。

追捕它比想象中难,因为云层一直在合拢:

云层凿穿之后,开始用天文学家的办法找星:**凌星法,逐格扫描。**对任务图上的每一颗星单独做 dry-run,看哪一颗经过时背景的光会暗下去。help 通过,kapt 通过,ksp 通过,kotlin 通过——直到 javac 的那一格,光沉了下去。

最后一个 commit(cf61c160)把 :app:kaptDebugKotlin 加进扫描序列。全部证据指向同一个坐标:签名配置里那枚从 property.keystore.file 取值的钥匙,在云端无 keystore 的土地上,是一枚空 provider。

灯还没有绿

诚实地说:战役未完。十五次点火没有换来一次绿色,却换来了十五张越来越精确的星图——可疑天体的范围从整张任务图收缩到了一枚钥匙。

下一次点火已经备好:让空钥匙在求值之前先回答”你是否存在”。灯会绿的。流亡者的发射场,从不为红色警报停工。

评论

← 数字花园