Netlify · Deploy Hook · OpenClaw · 遠端 Mac · 冒煙 · 死鏈 · 2026

2026 OpenClaw 前端實戰:
Netlify Deploy Hook 串聯遠端 Mac——冒煙測試、死鏈巡檢與建置摘要回傳

2026.04.14 前端/發布自動化 約 10 分鐘閱讀

適用對象:Netlify 託管靜態站或 SSR 轉接器的前端團隊,希望在「建置綠燈」之外,於上線後數分鐘內自動驗證路由、快取與 WebKit 行為,又不希望綁在單一筆電上。本文整理 Deploy Hook → 本機或遠端腳本鏈 的可複現步驟:暖站、Playwright 真瀏覽器冒煙、站內死鏈巡檢,最後將 build_summary 冪等回傳至 PR 或聊天。延伸可搭配 OpenClaw 冒煙與部署前檢查Lighthouse、連結與無障礙門檻,以及 建置耗時 → PR 摘要,讓數字與敘述並陳。

01 為何 Deploy Hook 適合與 OpenClaw、遠端 Mac 並用

Netlify 能證明編譯通過,使用者仍可能在幾分鐘後遇到轉址錯誤邊緣快取未更新僅 Safari 觸發的互動問題。Deploy Hook 是平台提供的最小契約:代表「某次建置/發布流程已觸發或完成,請開始後續動作」。把訊號餵給常駐的遠端 Mac,就能在7×24 時段內用原生 WebKit 與穩定的圖形/瀏覽器工作階段跑自動化,不必擔心筆電闔蓋或睡眠中斷排程。

OpenClaw 適合同一台 POSIX 主機上編排 Playwrightcurl 與小型 Node 工具。請把 Hook 當成入列工作,而非在 HTTP 連線內直接跑四十分鐘測試:入口快速回應(自架接收器可回 202 Accepted),實際檢查丟給背景 Worker,並以結構化日誌讓值班能用 deploy_id 對齊 CDN 與建置版本。

02 架構:從 Netlify 到回傳摘要

建置完成後,Netlify 可對您的 Build hook 發出 HTTP POST。請求應先抵達您掌控的入口(OpenClaw 閘道、極小的 Cloudflare Worker,或 Mac 上帶 TLS 的 nginx)。入口驗證共享密鑰、寫入 OPENCLAW_RUN_ID,再 exec~/runners/netlify-post-deploy.sh(或 Node 同等物)。

Runner 解析 DEPLOY_URL:正式網域或由 NETLIFY_AUTH_TOKEN 搭配 DEPLOY_ID 查 Deploy Preview。建議依序三階段:(A)暖站探測(B)冒煙+連結圖(C)build_summary 回傳。每階段寫入 .openclaw/reports/deploy_hook.ndjson,必要時再上傳物件儲存,避免把 Netlify 或 Git 的長效憑證塞進同一台筆電腳本。

03 可複現腳本串聯(本機與遠端同一套)

將下列骨架複製到版本庫 scripts/netlify/openclaw-post-deploy.shchmod +x 後,把 Netlify Hook(或 GitHub Action 內的 curl)指向會觸發該腳本的入口。同一檔案可在開發者 Mac 乾跑驗證,也可在租用的遠端 Mac 上當正式 Runner。

  1. 匯出情境:GIT_SHANETLIFY_DEPLOY_IDOPENCLAW_RUN_ID(例如 uuidgen),以及從 Hook JSON 或 CLI 對應的 DEPLOY_URL
  2. 暖站與重試:$DEPLOY_URL/healthz 或輕量文件循環 curl -fsS 取狀態碼,直到 200 或逾時;遇 429/連線重設時採指數退避+抖動,上限例如單次睡眠不超過 30 秒,避免打爆邊緣。
  3. 冒煙:npx playwright test tests/smoke --project=webkit --project=chromium,環境變數帶入 DEPLOY_URL;建議總時長控制在十分鐘內,以免誤把長測同步掛在 Hook 呼叫鏈上。
  4. 死鏈巡檢:/sitemap.xml 或精簡路由表為邊界爬站內錨點,記錄 urlfinal_statusredirect_chaincontent_type;必要路由若 404 或轉址迴圈即判階段失敗。
  5. 建置摘要 JSON:合併 Playwright 與巡檢耗時至 .openclaw/reports/build_summary.json,欄位含 schema: "build_summary/v1"git_shanetlify_deploy_idsmoke_mslink_scan_msfailed_cases[]exit_code
  6. 回傳:以標頭 Authorization: Bearer $OPENCLAW_GATEWAY_TOKENIdempotency-Key: ${GIT_SHA}:${NETLIFY_DEPLOY_ID}:summary POST 至 PR Webhook 或 Slack 相容端點;重複 Hook 投递不應洗版。

若發布前還需更細的體感與效能門檻,請改在上線前流程套用前文內鏈的 Lighthouse/連結/a11y 文章;Deploy Hook 鏈則專注上線後最快能代表使用者感受的訊號。

04 結構化日誌欄位、失敗重試與值班衛生

寫入 NDJSON 的每一行應帶相同鍵名,方便儀表板與人類對齊:

  • ts(ISO-8601)、levelopenclaw_run_idgit_shanetlify_deploy_idphasewarmupsmokelinkscallback)。
  • attempt(從 1 起算)、http_statuscurl_exitduration_msurl(遮罩 token)、error_classdnstlstimeoutassert)。
  • Playwright 相關另加 playwright_projecttrace_path 指標,勿把祕鑰貼進日誌正文。

重試策略:僅對冪等讀取的暖站 GET 在遇到 429502503 與連線重設時退避重試(例如基底 2 秒、係數 1.8、最多六次並加抖動)。冒煙本體不應在未知狀態下無限重跑;應先確認 deploy_id 是否變更或快取是否已刷新,再決定是否重試整包。

數值型耗時可再匯出到建置指標流水線,與內鏈的 PR 建置摘要做法對照,方便產品與工程同看「變慢」與「失敗」兩條線。

05 Hook 與回傳常見 HTTP 4xx/5xx FAQ

狀態碼 常見意義 建議檢查
400 回傳 JSON 不符合契約或缺必填欄位。 於 CI 用 JSON Schema 驗證 build_summary/v1;伺服器錯誤本文以 warn 記錄且去敏。
401/403 Hook HMAC/Bearer 不符,或 Git 留言權杖範圍不足。 輪替 OPENCLAW_GATEWAY_TOKEN;確認細粒度 PAT 含 PR 留言所需 scope;若用 JWT 注意時鐘偏移。
404 Deploy Hook 網址過期、站台刪除或分支 slug 錯誤。 於 Netlify 重新產生 Hook、更新祕鑰庫並搜尋 README 內舊連結。
409 冪等鍵碰撞——回傳端將重複建置視為重複摘要。 若內容一致可視為成功;否則調整 Idempotency 命名空間。
429 Netlify API 或 GitHub 次要速率限制。 退避、分環境 Hook、Deploy 中繼資料快取數分鐘再查。
502/504 邊緣冷啟動、無伺服器函式喚醒或 TLS 中間盒。 放寬暖站截止時間;自遠端 Mac 與本地各跑一次 curl -v 對照 DNS 與憑證鏈。

Deploy Hook 應直接呼叫長測嗎?

僅適合極輕量 ping。長時 Playwright 應進佇列由 Worker 執行,避免 Netlify 與入口長連線逾時;自架接收器請盡快結束 HTTP 並改以日誌/回呼追蹤。

Safari 專屬問題會出現在哪?

多見於 WebKit 斷言、轉址後資產網域與第三方 Cookie 策略。務必在 Apple 硬體--project=webkit;Linux 容器無法取代真實 Safari 訊號。

遠端 Mac · 7×24 · Safari+Chromium 瀏覽器自動化

讓 Netlify Hook 始終有「不關機的 Mac Runner」

每次 Netlify 發布後自動暖站、跑真瀏覽器冒煙與死鏈巡檢,並把摘要冪等回傳;無需把筆電當 24 小時值班機。可先免登入瀏覽 定價幫助中心,再到 購買/租用 取得專屬節點與頻寬,把 OpenClaw 與 Playwright trace 留在真實 Apple GPU 環境。

7×24 觸發 WebKit 冒煙 瀏覽器自動化
租用遠端 Mac · Hook 冒煙