Netlify · Deploy Hook · OpenClaw · 원격 Mac · 2026

2026 OpenClaw 프론트 실전:
Netlify Deploy Hook → 원격 Mac 스모크·깨진 링크 순찰·빌드 요약 회수

2026년 4월 14일 프론트엔드 / 릴리스 자동화 약 10분 분량

대상: Netlify 프론트 팀. 배포 직후 품질 신호를 노트북 없이 받으려면 Deploy Hook → 동일 스크립트 체인(워밍업·스모크·깨진 링크·build_summary)을 원격 Mac에 두면 됩니다. slug 예: 2026-openclaw-netlify-deploy-hook-smoke-test-remote-mac.html. 함께 읽기: 배포 전 스모크, Lighthouse·링크·a11y, 빌드 메트릭 PR 요약.

01 왜 Deploy Hook 옆에 OpenClaw·원격 Mac인가

빌드 성공 뒤에도 라우팅·엣지 캐시·Safari(WebKit) 이슈는 늦게 드러납니다. Build hook은 “배포 완료” 신호이고, 7×24 원격 Mac에 넘기면 절전과 무관하게 실제 WebKit에서 Playwright를 돌릴 수 있습니다.

OpenClaw는 curl·Node·Playwright를 한 호스트에 묶기 좋습니다. 훅은 빠른 응답 후 백그라운드로 처리하고, 긴 스위트는 워커 큐로 넘기세요.

02 아키텍처: Netlify → Ingress → 콜백

Netlify는 Build hook으로 POST하고, Ingress(OpenClaw 게이트웨이·Worker·nginx 등)가 비밀 검증 후 OPENCLAW_RUN_ID를 붙여 엔트리 스크립트를 실행합니다.

러너는 DEPLOY_PRIME_URL(프로덕션 또는 API로 조회한 Deploy Preview)을 고정한 뒤 (A) 워밍업(B) 스모크·링크 그래프(C) build_summary POST 순으로 진행하고, 단계별 로그는 .openclaw/reports/deploy_hook.ndjson에 적습니다.

03 로컬·원격 동일 재현 스크립트 체인

scripts/netlify/openclaw-post-deploy.sh를 저장소에 두고 훅은 Ingress만 치게 합니다. 로컬 드라이런과 상시 원격 Mac에 동일 파일을 씁니다.

  1. 컨텍스트 export: GIT_SHA, NETLIFY_DEPLOY_ID, OPENCLAW_RUN_ID(uuid 등), 훅 본문 또는 CLI에서 DEPLOY_URL 매핑.
  2. 워밍업·재시도: curl -fsS로 헬스 문서 폴링. 429·502·503에는 지수 백오프(예: 2초 시작·1.8배·캡 30초·최대 6회)와 지터.
  3. 스모크: npx playwright test tests/smoke --project=webkit --project=chromiumDEPLOY_URL 기준으로 실행. 훅을 실수로 동기 호출해도 되도록 전체 10분 이내를 권장합니다.
  4. 링크 순찰: sitemap·화이트리스트에서 내부만 확장, url·상태·리다이렉트·content_type 기록, 필수 경로 404·루프는 실패.
  5. build_summary JSON: .openclaw/reports/build_summary.jsonschema: "build_summary/v1", git_sha, netlify_deploy_id, smoke_ms, link_scan_ms, failed_cases[], exit_code를 합칩니다.
  6. 콜백: PR Webhook·Slack 호환 URL로 POST할 때 Authorization: Bearer $OPENCLAW_GATEWAY_TOKENIdempotency-Key: ${GIT_SHA}:${NETLIFY_DEPLOY_ID}:summary로 중복 훅 전달을 흡수합니다.

배포 전 UX는 링크한 Lighthouse 글을 앞에 두고, 훅 체인은 빠른 회귀 신호에 집중하세요.

04 NDJSON 로그 필드·재시도·운영 습관

한 줄마다 동일 키를 쓰면 대시보드와 온콜이 같은 언어로 대화합니다.

  • ts(ISO-8601), level, openclaw_run_id, git_sha, netlify_deploy_id, phase(warmup|smoke|links|callback).
  • attempt, http_status 또는 curl_exit, duration_ms, 토큰이 섞일 수 있는 url은 마스킹, error_class(dns|tls|timeout|assert).
  • 해당 시 playwright_project, 비밀 대신 trace_path 포인터.

재시도: 워밍업 GET만 429·502·503·리셋에 백오프. 변이 스모크는 deploy_id·캐시 확인 후 재실행.

05 훅·콜백 HTTP 4xx / 5xx FAQ

상태 의미 점검
400 콜백 JSON 형식 오류·필수 필드 누락. CI에서 JSON Schema 검증, 응답 본문은 warn·비밀 마스킹.
401 / 403 훅 HMAC·Bearer 불일치, PR 코멘트 PAT 권한 부족. 토큰 순환, PAT에 PR 쓰기 권한, JWT면 시계 스큐.
404 오래된 훅 URL·삭제된 사이트·브랜치 슬러그 오류. 훅 재생성, 금고 값 갱신, 문서 내 구 URL grep.
409 멱등 충돌·동일 배포 요약 중복. 본문이 같으면 성공 취급, 다르면 멱등 네임스페이스 조정.
429 Netlify API 또는 GitHub 보조 한도. 백오프·훅 샤딩·메타 5분 캐시.
502 / 504 엣지 콜드스타트·Functions 기동·TLS 중간 장비. 워밍업 연장·DNS 확인·원격/로컬 curl -v 비교.

훅이 테스트를 직접 호출해도 되나요?

핑 수준이면 가능합니다. 긴 Playwright는 워커 큐로 넘기고 Ingress는 빨리 닫으세요.

Safari 전용 실패는 어디에 남나요?

WebKit 프로젝트 단언과 리다이렉트된 정적 호스트에 자주 남습니다. --project=webkit은 Apple 실기에서 돌리는 것이 신호가 가장 정직합니다.

원격 Mac · 7×24 · Safari + Chromium 자동화

Netlify 훅을 끊기지 않는 Mac 러너에 연결하세요

배포마다 OpenClaw·Playwright를 돌리고 트레이스는 실제 WebKit 위에 남깁니다. 로그인 없이 요금·도움말 확인 후 구매·대여로 상시 Mac을 확보하세요.

7×24 트리거 WebKit 스모크 브라우저 자동화
원격 Mac 대여 · Deploy Hook QA