全量與 affected · 快取鍵單調性 · 唯讀扇出 · 六步門禁與回滾全量
維護大型 Monorepo的團隊在多台遠端 Mac Mesh節點跑 CI 時,常被「一改就全量編譯」拖垮:快取鍵漂移、affected 圖與 Runner 標籤不一致、消費節點誤拉半成品快取。本文給出全量、affected、專用重編譯節點決策矩陣、可重現輸入邊界與唯讀扇出職責,並附六步門禁與回滾條件。可與跨區產物分發矩陣、Merge Queue 與 Runner 標籤併讀。
影響範圍建置依賴變更圖、鎖檔與工具鏈指紋一致;任一項跨區不同步,就會本地綠、遠端紅,或更糟的假綠。Mesh 下互動工作階段與無人值守流水線共用前綴時,幽靈依賴會污染快取鍵,使 affected 膨脹成全量卻難以從指標看出。
與快取就近與 artifacts 對照分工:該文寫位元組路徑;本文寫計算圖裁剪與觸發規則。尚未拆分 ci-merge 者請先讀 Merge Queue 文。
變更圖與標籤漂移:不同 Runner 標籤解析出不同 workspace 根路徑,affected 子集不一致。
鎖檔未進鍵:解析結果變了但快取仍命中舊 tarball。
工具鏈指紋缺席:Xcode 小版本未寫入 manifest,消費機 silent mismatch。
扇出與計算混線:唯讀消費者被授權寫快取前綴,與 affected 判定競態。
全量回滾條件缺:核心套件或產生碼腳本變更仍強制 affected。
下列面向針對多地區遠端 Mac 共享池上的 Monorepo 流水線。
| 面向 | 優先全量 | 優先 affected | 拆專用重編譯節點 |
|---|---|---|---|
| 變更類型 | 產生碼、建置腳本、共用 native 介面 | 單一應用套件內 UI 與文案 | 夜間大量 heavy 模組與日間 PR 搶同一池 |
| 佇列訊號 | 連續兩次 affected 失敗或整合測隨機紅 | 變更圖穩定且鎖檔校驗一致 | CPU 空閒但 wall time 高、互動使用者抱怨 |
| 快取鍵 | 提高工具鏈段權重、暫停跨節點複用 | 鎖檔+變更雜湊+ Runner OS 層 | 重編譯節點獨立前綴、扇出唯讀鏡像 |
| 跨區一致性 | 全節點統一 manifest 世代再開編譯 | 允許區域鏡像延遲但禁止寫回主前綴 | 主區寫快取、衛星唯讀掛載或拉取 |
| 回滾全量 | 保護分支合併後首個綠構建前 | 每週定時一次對照全量 | 大版本 Xcode 切換週強制全量週 |
先凍結「可重現輸入」再談 affected;順序反了會把 flaky 從編譯器搬進排程器。
假設 Runner 已依共享池 SSH完成互信;跨洋扇出請併用產物分發的租約與 manifest。
凍結輸入三元組:commit、鎖檔摘要、xcodebuild 指紋寫入標頭;任一變更 bump 快取世代。
產出變更圖:在固定 Runner 標籤單點解析,輸出受影响套件清單 artifact。
全量門檻:命中產生碼、共用 kernel 或工具鏈升級清單時短路為全量並寫審計碼。
主快取前綴:僅主建置節點寫入;衛星節點唯讀拉取,禁止回寫 DerivedData。
扇出校驗:雜湊與大小雙欄位通過後才切指標;失敗則阻斷消費端編譯。
重試與回滾:網路類指數退避;校驗類開 incident 並強制下一提交全量至綠。
CACHE_KEY="${CI_COMMIT_SHORT_SHA}:${LOCKFILE_SHA256}:$(xcodebuild -version | shasum -a 256 | cut -c1-12)"
export TURBO_REMOTE_CACHE_SIGNATURE="${CACHE_KEY}"
echo "affected=$(npx turbo run build --dry=json | jq -r '.packages | length')" > "${CI_PROJECT_DIR}/affected.meta"
提示:工具可替換為 Nx、Bazel;重點是單一權威變更圖與單調快取鍵。
下列為規劃起點,須以實際變更分佈與建置時長直方圖替換,不得逕稱對外 SLA。
夜間 affected 與互動式索引寫入共用磁碟子系統時,僅看 CPU 會誤判健康。
| 團隊規模訊號 | 建議起步策略 | 與產物扇出關係 |
|---|---|---|
| 個位數貢獻者 | 單區主建置+本機 affected | 扇出需求低 |
| 多地區併行 PR | 主區寫快取+衛星唯讀+ manifest | 與 rsync 或物件儲存扇出強耦合 |
| AI Agent 夜間任務 | 專用重編譯節點與互動池隔離 | 避免 Agent 耗盡共享鍵空間 |
依賴個人筆電做遠端編譯入口,常在休眠、鎖屏與頻寬波動上同時欠帳;自建固定資產又被採購與折舊節奏綁架。
相較之下,需要合約化節點、可稽核頻寬與區域可選、同時承載 iOS 持續交付與 AI 夜間負載的團隊,VpsMesh 的 Mac Mini 雲端租賃通常是更優解:節點角色可拆分、鏈路可稽核,讓 affected 命中率與佇列深度同樣可驗收。