mirror of
https://github.com/Gloridust/WechatOnCloud.git
synced 2026-08-31 02:31:27 -07:00
fix(critical): 实例镜像 arm64 构建 OOM + 版本耦合无兜底致面板锁死(v1.4.1 连环 P0)
v1.4.1 只发布了面板、实例镜像 CI 失败,叠加版本耦合无兜底 → 用户升级指示器消失、 实例卡在坏的 1.4.0、浏览器仍黑屏。两处修复: ① Dockerfile arm64 OOM:CI 的 QEMU arm64 下第二个 apt 层 OOM(两次 apt-get update + snapshot 源被后续层反复拉取)。合并为单层一次 update+install、装完即移除 snapshot 源、 Acquire::Languages=none + Retries=3,砍掉内存/网络峰值。本机原生 arm64 构建 + 全套探针 (Chromium 149 / DPI 98304 / CEF 连跑两次 / 30s 零崩溃 / 窗口可见)已验证通过。 ② 版本耦合安全兜底:面板偏好「与自身同版本」的实例镜像 tag,但该 tag 在本地和 registry 都不存在时(CI 部分失败/发布时序),原先会指向不存在的 tag → 检测恒空、升级拉不到。 新增 resolveInstanceImage():不可达则回退 :latest,功能永不因版本错配而瘫痪(已运行时验证 9.9.9→latest)。启动时与 ensureImage 前各解析一次。 P0 复盘记录连环成因;待办:改用原生 arm64 runner 替代 QEMU、matrix 失败联动。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,22 @@
|
||||
> 每次 P0 修完在这里记一笔:症状 → 根因 → 为什么会发生(流程层面) → 对应守则。
|
||||
> 目的不是追责,是让同一类错误只交一次学费。新条目追加在最上面。
|
||||
|
||||
## 2026-07-07 · v1.4.1 实例镜像发不出 + 版本耦合把面板锁死(连环)
|
||||
|
||||
- **症状**:v1.4.1 发布后,用户升级面板成功,但升级指示器消失、实例卡在 1.4.0(Chromium 150)、浏览器仍黑屏。
|
||||
- **根因链(两个 bug 叠加)**:
|
||||
1. **CI 实例镜像 job 失败**:门禁探针过了,但最终多架构构建在 **QEMU arm64** 下第二个 apt 层 OOM(`Cannot allocate memory`)——两次 `apt-get update` + snapshot 源在后续层被反复拉取,内存压力在模拟环境爆掉。结果 panel job 成功、wechat job 失败 → **只发布了面板、没发布实例镜像**。
|
||||
2. **版本耦合无兜底**:面板 1.4.1 因耦合去找 `wechat-on-cloud:1.4.1`(不存在)→ `latestInstanceImageId` 恒 null → 可升级检测全灭;升级也拉不到。一个「防错配」的功能,自己造成了更严重的错配瘫痪。
|
||||
- **为什么会发生**:
|
||||
- 产物门禁只覆盖 amd64(gate build 是 `load:true` 单架构),arm64 只在最终 push 步骤才构建 → 门禁没拦住 arm64 的失败;
|
||||
- 版本耦合是「乐观锁」——假定同版本实例镜像一定存在,没考虑 CI 部分失败/发布时序;
|
||||
- matrix 两个 job 相互独立,一个失败另一个照发 → 产生「面板新、实例旧」的错配(正是耦合想防的)。
|
||||
- **修复**:
|
||||
1. Dockerfile 合并两个 apt 层为一次 update+install、装完即移除 snapshot 源、`Acquire::Languages=none`+`Retries=3` → 砍掉 QEMU 下的内存/网络峰值。**本机原生 arm64 构建 + 全套探针验证通过**;
|
||||
2. `resolveInstanceImage()` 兜底:偏好的版本 tag 在本地和 registry 都不可达 → 回退 `:latest`,保证功能永不因版本错配而瘫痪(已运行时验证)。
|
||||
- **仍待办(未在本次)**:改用**原生 arm64 runner**(`ubuntu-24.04-arm`)替代 QEMU,从根上消除模拟内存问题并提速;matrix 失败应联动(实例发不出就别单独发面板)。
|
||||
- **守则**:R1;门禁原则补充——**门禁必须覆盖所有发布架构**,不能只测 amd64。
|
||||
|
||||
## 2026-07-07 · v1.4.0 CI 镜像浏览器实例仍黑屏(Chromium 150 漂移)
|
||||
|
||||
- **症状**:v1.4.0 发布后,微信恢复正常,但浏览器(Chromium)实例升级后依然黑屏/只见壁纸无窗口,崩溃循环(每 2s 一次,裸 `Trace/breakpoint trap`,无任何错误输出,**没有** DPI 事故的 "not invertible" 特征)。
|
||||
|
||||
Reference in New Issue
Block a user