痛點與邊界
- 全量構建:共享 Mac 簽章與 I/O 被長任務占滿。
- 路徑誤判:過窄規則漏相依;
main/release 上ci/、.github/變更須擴大計畫。 - 密鑰與告警:Webhook 散佈難輪換;無退避時 429/5xx 加重疲勞。
變更偵測(路徑過濾)
以 git diff --name-only "$BASE_SHA"...HEAD 或 paths-filter 比 diff;將變更檔映射到套件根,產出單一計畫檔(JSON 或清單)供各節點共用,下游只讀此檔語意一致。Turborepo/Nx affected 可替換手寫 glob,契約不變。無命中時可降級便宜 smoke 而非全矩陣。worktree/lockfile 見 Git worktree 矩陣。
佇列/鎖
OpenClaw 構建摘要
勿整段貼原始日誌。構建後將離開碼、套件、mesh_node_id、耗時、首則錯誤交網關本機 OpenClaw 或模板,輸出四百字內 Markdown,並帶上供應商執行連結。xcresult 優先餵解析切片。摘要內勿出現權杖,僅寫 job 或 credential_id。Webhook 通知版面可對齊欄位與去重鍵。
Slack Incoming Webhook 最小權限
Webhook 為bearer URL:0440、僅網關可讀、不入庫;出站 hooks.slack.com;runner 只送網關佇列,唯網關 POST,旋轉時不必逐臺 runner。目錄見 密鑰最小權限。上線前 curl 探針 JSON,正式載荷用 application/json。
export SLACK_URL="$(sudo cat /etc/openclaw/secrets.d/slack/build-summary.url)"
curl -sS -X POST -H 'Content-Type: application/json' \
-d '{"text":"MeshMac 探針 OK — '"$(hostname -s)"'"}' "$SLACK_URL"
失敗退避
429/暫態 5xx:指數退避+完整抖動、硬上限;遵守 Retry-After;多 runner 同秒重試會驚群,抖動可打散。400/404 勿盲重試。以 provider_run_id+結論去重約七十二小時。佇列語意見 任務重試步驟。
網關與權杖輪換簡表
| 介面 | 輪換對象 | 備註 |
|---|---|---|
| OpenClaw 網關 TLS | 憑證/ACME | 重載勿斷進行中 POST;TLS 矩陣 |
| Slack Webhook | 整段 URL | 雙寫切換;舊 URL 於 Slack 撤銷 |
| CI → 網關 HMAC | 簽章密鑰 | 交錯版本;拒未簽名 POST |
| Git 讀取 | PAT/App | 僅 monorepo contents:read |
負載均衡後輪換對齊 負載與故障轉移。
FAQ
問:過濾會漏相依?
答:用相依圖或原生 affected;發布分支暫放寬,功能分支再收緊。
問:綠燈要跑模型?
答:否,模板即可。
問:Webhook 遭弱化?
答:內部 CI 仍常用,可規劃遷移 App。