導讀:TeamCity 以 Webhook 將建置事件 JSON POST 至遠端 Mac上 OpenClaw 閘道(僅 127.0.0.1),先做 lockfile 漂移掃描與 npm ci 乾跑,再以最小權限 REST 權杖回寫建置摘要。請搭配 Node 22+、onboard/doctor、LaunchAgent。延伸:Jenkins 預檢、CircleCI lockfile、重試;docs.openclaw.ai。

安裝、閘道與守護程序(Node 22 以上)

1)安裝:官方指令或 npm i -g openclaw;openclaw onboard 後跑 openclaw doctor 驗證憑證與埠。

2)閘道:僅綁 127.0.0.1,外層 TLS 終止;launchd 常駐並寫死 PATH/NODE_BINARY,與 SSH 互動一致。

3)目錄:每次 mktemp -d,結束刪除,避免並行覆寫暫存依賴。

  • 閘道儀表板使用窄用途 Bearer;與 TeamCity 入站共享祕鑰、REST 寫回權杖分桶存放。
  • 每 60 秒探針 /health,異常告警並保留最近日誌便於比對。
# 閘道健康(替換 PORT、GATEWAY_TOKEN)
curl -sS -o /dev/null -w '%{http_code}\n' \
  -H 'Authorization: Bearer YOUR_GATEWAY_TOKEN' \
  --connect-timeout 3 --max-time 10 \
  http://127.0.0.1:PORT/health

痛點:筆電閘道易斷線、權杖過大難稽核、lockfile 漂移未前移而浪費佇列與頻寬。

決策矩陣:誰適合承載 CI 前置節點

筆電/自建 VM 對照遠端 Mac 託管
面向筆電或臨時 VMMacPull 遠端 Mac
可用性休眠易斷機房常駐、Webhook 穩
稽核帳號混用專用節點與日誌集中
鎖檔環境漂移固定 Node 對齊 TC

TeamCity Webhook、令牌最小權限與簽章

於專案/型樣啟用 Webhook:在「建置開始」等事件 POST JSON(含 buildId、revision 等)。URL 用長隨機路徑當共享祕鑰,可再加標頭或 HMAC(對原始本文)。Personal Access Token 僅給讀建置與寫註解所需範圍。

參數對照(實務最小集)
項目建議值/行為目的
入站祕鑰路徑 token 或標頭防掃描
REST僅寫註解/讀建置最小權限
Content-Typeapplication/json解析一致
逾時10~30 秒不阻塞佇列
來源內網或固定 IP邊界

OpenClaw:lockfile 漂移掃描與依賴乾跑

Handler:驗祕鑰或 HMAC → 淺克隆與 checkout 修訂版 → git diff 看 lock 與 manifest → npm ci --dry-run → tail 取摘要。組態建置宜由上層型樣聚合觸發一次,避免子組態重試風暴。

# lockfile 與乾跑(示例)
git diff --exit-code origin/main -- package-lock.json || true
npm ci --dry-run 2>&1 | tail -n 60
  • 子程序加 timeout,避免占滿外掛連線。
  • 完整輸出落盤再以 tail 做摘要,便於對時戳排查。

建置摘要回傳、失敗重試與日誌定位

預檢後以 curl 呼叫 TeamCity REST(註解或第二 Webhook),附 Bearer;路徑依版次文件。設 --connect-timeout、--max-time;非 2xx 用二四八秒退避至多五輪並落盤;排查時對齊閘道日誌與外掛請求序號。

# 摘要 POST 示例(替換 SERVER、BUILD_LOCATOR、TOKEN)
curl -sS -X POST "https://SERVER/app/rest/builds/BUILD_LOCATOR/comment" \
  -H 'Content-Type: text/plain' \
  -H "Authorization: Bearer $TC_REST_TOKEN" \
  --data-binary @/tmp/preflight-summary.txt \
  --connect-timeout 5 --max-time 25

最小可複現步驟清單

  1. Node 22+、onboard、doctor。
  2. 閘道回環、Bearer、launchd、/health。
  3. TeamCity Webhook:JSON、修訂版、祕鑰或 HMAC。
  4. Handler:暫存目錄、lock diff、npm ci --dry-run。
  5. REST 回寫摘要;二四八秒重試;比對日誌。

常見報錯排查 FAQ

TeamCity 顯示 Webhook 成功但 Mac 無日誌?

檢查隧道或反向代理轉發埠;核對路徑祕鑰;若閘道要求 Authorization: Bearer,於外掛或代理層補標頭。

REST 回傳 401/403?

確認權杖範圍含目標專案;BUILD_LOCATOR 與文件一致;勿將權杖寫入可被建置日誌列印的參數。

簽章失敗或 npm 找不到?

HMAC 對原始本文;TC 是否重排 JSON;plist 寫死 PATH/NODE_BINARY;which npm。

結語

總結:Webhook+OpenClaw 重點為 路徑一致、祕鑰與 REST 分離、暫存 lock 乾跑、逾時與二四八秒退避。遠端 Mac作穩定 CI 前置節點省斷線與漂移。首頁、購買、說明免登入;實戰合集。

TeamCity × OpenClaw × 遠端 Mac

租用遠端 Mac 承載 TeamCity 前置閘道

說明中心、購買頁、定價、首頁、OpenClaw 實戰合集 皆站內公開免登入。

多地域可選
SSH 存取
彈性租期
支援管道