release-mac 停在 0.1.139:节点离线 + release 渠道门禁双重故障 #536

Closed
opened 2026-09-30 11:04:58 +08:00 by suzmii · 1 comment
Member

现象

官网 / /api/client-downloads 的 macOS 仍指向 0.1.139(2026-09-24 04:22 发布),同渠道 Windows 已到 0.1.167(2026-09-30 04:11),落后 28 个号;agc/release-mac/ 下 09-24 之后没有任何版本对象。

原因一:macOS 节点离线 4 天 15 小时(09-24 21:05 → 09-29 12:17)

  • 节点是办公 Mac(LaunchAgent world.genarrative.jenkins-agc-macos),控制器地址写死办公网 http://192.168.35.82:8080/jenkins/。
  • ~/Library/Jenkins/agent.stderr.log:09-24 21:05:34 连接被重置,之后到 09-29 12:17:53 持续 …/jenkins/login is not ready + Waiting 10 seconds before retry(约 2340 次),期间无一次成功连接。
  • 节点 workspace reflog:最后一次 checkout 是 09-24 19:11,下一次是 09-29 13:11 —— 窗口内 mac 侧零构建(dev 也停);09-25/26/27/28 的 release 轮 pin 的 commit 到节点恢复时已被推进,按 SKIP_IF_SUPERSEDED 让位。
  • 触发条件:机器被带离办公网。已恢复(09-29 13:48 正常发布 dev-mac 0.1.161)。

原因二:release 渠道发布门禁必挂(09-30 04:00 轮)

  • 节点在线、Checkout 正常(04:00:29 reset → 54e534b1)、npm ci 04:01:54 完成、prepare-macos-codex 04:02 完成,之后无任何写入(无 artifacts/、无版本改写、无 cargo 产物)——门禁在打包脚本之前秒挂。

  • 根因:80bf54c3(09-29)新增的 dev 渠道 NSIS 改名迁移钩子只在 channel === AGC_DEFAULT_CHANNEL 且目标含 windows 时下发,而同一批新增的用例 release stages Node before Tauri and injects its resource mapping only for bundles 用 resolveReleaseContext(['--target', windowsTarget]) 从环境取渠道、却无条件断言钩子存在;jenkins/Jenkinsfile.ai-game-creator-shell-macos-build 是唯一跑这几条 node --test 的地方且带着 AGC_UPDATE_CHANNEL=release → release lane 每次必挂,dev lane 与 Windows lane 不受影响。

  • 复现(在最新 master 7b04830a0 上):

    AGC_UPDATE_CHANNEL=release node --test apps/ai-game-creator-shell/scripts/build-release.test.mjs apps/ai-game-creator-shell/scripts/cargo-features.test.mjs
    → # pass 43  # fail 1
      error: "Cannot read properties of undefined (reading 'nsis')"
    不设变量 或 AGC_UPDATE_CHANNEL=dev → 44/44
    
  • 该形态在 docs/project-memory/shared-memory/pitfalls.md(「Jenkins 渠道参数会进入 Node 测试进程,默认值测试必须隔离环境」)里已记过一次,这是第二次复发。

修复

  • 关联 PR 把该用例的渠道读取改用 withEnv({ AGC_UPDATE_CHANNEL: undefined }) 隔离,断言落回默认渠道身份。
  • 验证:修复后 AGC_UPDATE_CHANNEL=release / =dev / 未设置三态均 44/44;prettier --check、npm run check:encoding(5130 文件)、check:doc-index(207 份)、git diff --check 通过。

待办(需人工 / Jenkins)

  • 合并后用带 Jenkins 凭据的 release 重新发布 mac(发号 Job + Genarrative-Agc-MacOS-Build,AGC_UPDATE_CHANNEL=release、SKIP_IF_SUPERSEDED=false),再核对 agc/release-mac/latest.json 与官网 /api/client-downloads。
  • 节点可用性加固(agent -url 是否改公网、04:00 是否需要唤醒、节点离线是否加告警)单独决定。
## 现象 官网 / `/api/client-downloads` 的 macOS 仍指向 `0.1.139`(2026-09-24 04:22 发布),同渠道 Windows 已到 `0.1.167`(2026-09-30 04:11),落后 28 个号;`agc/release-mac/` 下 09-24 之后没有任何版本对象。 ## 原因一:macOS 节点离线 4 天 15 小时(09-24 21:05 → 09-29 12:17) - 节点是办公 Mac(LaunchAgent `world.genarrative.jenkins-agc-macos`),控制器地址写死办公网 `http://192.168.35.82:8080/jenkins/`。 - `~/Library/Jenkins/agent.stderr.log`:09-24 21:05:34 连接被重置,之后到 09-29 12:17:53 持续 `…/jenkins/login is not ready` + `Waiting 10 seconds before retry`(约 2340 次),期间无一次成功连接。 - 节点 workspace reflog:最后一次 checkout 是 09-24 19:11,下一次是 09-29 13:11 —— 窗口内 mac 侧零构建(dev 也停);09-25/26/27/28 的 release 轮 pin 的 commit 到节点恢复时已被推进,按 `SKIP_IF_SUPERSEDED` 让位。 - 触发条件:机器被带离办公网。已恢复(09-29 13:48 正常发布 dev-mac `0.1.161`)。 ## 原因二:release 渠道发布门禁必挂(09-30 04:00 轮) - 节点在线、Checkout 正常(04:00:29 `reset → 54e534b1`)、`npm ci` 04:01:54 完成、`prepare-macos-codex` 04:02 完成,之后无任何写入(无 `artifacts/`、无版本改写、无 cargo 产物)——门禁在打包脚本之前秒挂。 - 根因:`80bf54c3`(09-29)新增的 dev 渠道 NSIS 改名迁移钩子只在 `channel === AGC_DEFAULT_CHANNEL` 且目标含 windows 时下发,而同一批新增的用例 `release stages Node before Tauri and injects its resource mapping only for bundles` 用 `resolveReleaseContext(['--target', windowsTarget])` 从环境取渠道、却无条件断言钩子存在;`jenkins/Jenkinsfile.ai-game-creator-shell-macos-build` 是唯一跑这几条 `node --test` 的地方且带着 `AGC_UPDATE_CHANNEL=release` → release lane 每次必挂,dev lane 与 Windows lane 不受影响。 - 复现(在最新 master `7b04830a0` 上): ``` AGC_UPDATE_CHANNEL=release node --test apps/ai-game-creator-shell/scripts/build-release.test.mjs apps/ai-game-creator-shell/scripts/cargo-features.test.mjs → # pass 43 # fail 1 error: "Cannot read properties of undefined (reading 'nsis')" 不设变量 或 AGC_UPDATE_CHANNEL=dev → 44/44 ``` - 该形态在 `docs/project-memory/shared-memory/pitfalls.md`(「Jenkins 渠道参数会进入 Node 测试进程,默认值测试必须隔离环境」)里已记过一次,这是第二次复发。 ## 修复 - 关联 PR 把该用例的渠道读取改用 `withEnv({ AGC_UPDATE_CHANNEL: undefined })` 隔离,断言落回默认渠道身份。 - 验证:修复后 `AGC_UPDATE_CHANNEL=release` / `=dev` / 未设置三态均 44/44;`prettier --check`、`npm run check:encoding`(5130 文件)、`check:doc-index`(207 份)、`git diff --check` 通过。 ## 待办(需人工 / Jenkins) - 合并后用带 Jenkins 凭据的 release 重新发布 mac(发号 Job + `Genarrative-Agc-MacOS-Build`,`AGC_UPDATE_CHANNEL=release`、`SKIP_IF_SUPERSEDED=false`),再核对 `agc/release-mac/latest.json` 与官网 `/api/client-downloads`。 - 节点可用性加固(agent `-url` 是否改公网、04:00 是否需要唤醒、节点离线是否加告警)单独决定。
suzmii added the
Priority
Critical
1
Kind/Bug
labels 2026-09-30 11:04:58 +08:00
Author
Member

关闭本 Issue:两条根因的处置都已落地或恢复,剩下的只是一个观察点。

  • 原因一(节点离线 2026-09-24 21:05 → 09-29 12:17):节点已恢复;可用性加固(agent 地址是否改公网、04:00 是否需要唤醒、掉线是否告警)仍未开工,需要时另开单。
  • 原因二(release 渠道门禁被环境渠道带挂):已由 master 39823b05c(2026-09-30 12:00)修复并验证 —— master 干净 worktree 下五个门禁文件在 AGC_UPDATE_CHANNEL=release = 62/62,dev = 44/44。等价做法的 PR #537 已关闭。
  • 观察点:关闭时 agc/release-mac/latest.json 仍是 0.1.139(最后一次发布 09-24 04:22),修复要等下一轮 04:00 的 release 才会带上。如果那轮之后 release-mac 仍未上升,或再出现同类"卡住正式发版",请重开本 Issue。
  • 设计层问题转 #542(优化发版脚本回归测试接入:每 PR 必跑 + 输入确定 + 防复发守卫)。
关闭本 Issue:两条根因的处置都已落地或恢复,剩下的只是一个观察点。 - 原因一(节点离线 2026-09-24 21:05 → 09-29 12:17):节点已恢复;可用性加固(agent 地址是否改公网、04:00 是否需要唤醒、掉线是否告警)仍未开工,需要时另开单。 - 原因二(release 渠道门禁被环境渠道带挂):已由 master `39823b05c`(2026-09-30 12:00)修复并验证 —— master 干净 worktree 下五个门禁文件在 `AGC_UPDATE_CHANNEL=release` = 62/62,dev = 44/44。等价做法的 PR #537 已关闭。 - 观察点:关闭时 `agc/release-mac/latest.json` 仍是 `0.1.139`(最后一次发布 09-24 04:22),修复要等下一轮 04:00 的 release 才会带上。如果那轮之后 release-mac 仍未上升,或再出现同类"卡住正式发版",请重开本 Issue。 - 设计层问题转 #542(优化发版脚本回归测试接入:每 PR 必跑 + 输入确定 + 防复发守卫)。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#536