2026 OpenClaw 前端實戰:
遠端 Mac 對接 Vercel Deployment Hook——冒煙測試、安全 Headers 巡檢與建置摘要回傳
適用對象:以 Vercel 託管前端並希望在每次部署後於真實公開網址完成冒煙與安全 Headers固化驗證的團隊。本文給出 OpenClaw 與遠端 Mac 上的同一套 Runbook:從 Deployment Hook 到 build_summary 冪等回傳。延伸可併讀 Cloudflare Pages Hook、Netlify Deploy Hook、CSP/nonce 驗收。slug:2026-openclaw-vercel-deployment-hook-smoke-headers-summary.html。
痛點拆解
- 儀表板顯示綠燈,但邊緣或
vercel.json變更使 Headers 漂移,使用者端才暴露。 - 筆電闔蓋或睡眠中斷排程,無人穩定執行 WebKit 真機訊號。
- 摘要回傳若無冪等鍵與去敏,易洗版或把權杖寫進日誌。
| 策略維度 | 預覽(Preview) | 正式(Production) |
|---|---|---|
| Hook 與期待值 | 分支/PR 專用 Hook;headers_expect.preview.json。 |
主線 Deploy Hook;headers_expect.prod.json;Ingress 校驗自訂網域。 |
| 冒煙範圍 | 較短路由+關鍵互動;可略過重資產頁。 | 完整 tests/smoke;WebKit 優先於 Apple Silicon 遠端 Mac。 |
01 OpenClaw 與 Hook URL
於 Vercel 專案 Settings → Git → Deploy Hooks 建立指向 Production 的 URL,並讓請求僅能打到帶共享祕密的 Ingress(閘道或 Worker)。入口應快速回 202 Accepted,發行 OPENCLAW_RUN_ID,再委派 ~/runners/vercel-post-deploy.sh。自 Payload 或 CI 注入變數讀取 VERCEL_URL、VERCEL_DEPLOYMENT_ID、VERCEL_GIT_COMMIT_SHA,並在 Runner 開頭驗證主機名是否為預期本番網域。版本庫內固定路徑 scripts/vercel/openclaw-post-deploy.sh,本機與 SSH 遠端 Mac 共用。
可複現步驟(依序執行)
- Ingress 驗證 HMAC 或 Bearer,正文以
jq解析;失敗即拒絕並記錄請求 ID。 - 匯出
DEPLOY_URL=https://${VERCEL_URL};自訂網域時用環境對照表覆寫。 - 以
deploy_id做短鎖,避免並發部署互踩。 - 長任務入佇列;HTTP 執行緒不阻塞於四十分鐘 E2E。
- 將階段寫入
.openclaw/reports/deploy_hook.ndjson,鍵名與 Netlify 版對齊便於儀表板共用。 - 與 建置耗時 PR 摘要 共用欄位命名,利於橫向比較。
02 冒煙與 Headers 檢查腳本介面
(A)暖站:以 curl -fsS 輪詢至 HTTP 200 與 HTML 內建健康標記,遇 429/502/503 採指數退避加抖動。(B)Headers:在 config/headers_expect.json(或環境分流檔)列出 strict-transport-security、content-security-policy、x-frame-options 等,與 curl -sSI 實際回應做正規化後 diff,輸出 .openclaw/reports/headers_diff.txt。(C)冒煙:npx playwright test tests/smoke --project=webkit --project=chromium;失敗時 trace 落 .openclaw/traces/。NDJSON 每行帶 phase、http_status、duration_ms。
03 失敗摘要回傳模式
全數通過時以 build_summary/v1 寫入 git_sha、deploy_id、各階段毫秒與 headers_diff_bytes 至 .openclaw/reports/build_summary.json。任階段失敗則附 failed_phase、錯誤摘錄與 exit_code。對 PR 留言或聊天 Webhook POST 時帶 Idempotency-Key: ${VERCEL_GIT_COMMIT_SHA}:${VERCEL_DEPLOYMENT_ID}:summary,避免重送洗版;權杖與 Hook 祕鑰永不寫入 NDJSON 正文。
04 FAQ
| 症狀/代碼 | 切分建議 |
|---|---|
| Hook 端 401 | Ingress 祕鑰輪替未同步、Authorization 方案誤植;對齊 Vercel 與祕鑰庫後重試。 |
| Headers 驟然不一致 | 檢查 Middleware、ISR 首包與 vercel.json;按部署 ID 保存 curl 輸出縮小差異來源。 |
| 僅 WebKit 失敗 | ITP、第三方 Cookie 與追蹤防護;附 trace 與 VERCEL_DEPLOYMENT_ID 重現。 |
| 摘要 POST 429 | Git 供應方次要速率限制;退避並拉長留言間隔。 |
長時測試勿掛在 Hook 同步連線;headers_expect 務必分環境,避免誤對預覽網域套用本番期待。
可引用資訊(值班/簽核)
- ▸單次暖站退避:基底 2 秒、係數 1.8、最多六次並加抖動。
- ▸冪等鍵命名空間:
SHA:deploy_id:summary,重複觸發不重複留言。 - ▸冒煙建議總時長壓在十分鐘內,長測改非同步 Worker。