Cloudflare Pages · Deploy Hook · 캐시 · Headers · OpenClaw · 원격 Mac · 2026

2026 OpenClaw 프론트 실전:
원격 Mac에서 Cloudflare Pages Deploy Hook으로 스모크·보안 Headers 순찰·빌드 요약 회수

2026.04.16 프론트엔드 / 릴리스 자동화 약 9분 읽기

대상: Cloudflare Pages에 정적·프레임워크 출력을 올리고 배포 직후 엣지 캐시·보안 헤더·Safari 서명을 한 번에 닫으려는 팀. Netlify Deploy Hook 런북(별도 글)과 달리 여기서는 CF 전용 훅 URL·캐시 무효·_headers 규칙 diff·curl 배치·OpenClaw 게이트웨이 실패 요약에 초점을 둡니다. slug: 2026-openclaw-cloudflare-pages-deploy-hook-remote-mac-howto.html. 연계: HTTP/3·QUIC 검수, Service Worker 출시, 빌드 메트릭 PR 요약, 블로그 목록.

01 배포 성공만으로는 부족한 세 가지

Pages 빌드가 끝어도 엣지 캐시가 오래된 HTML·해시 없는 자산을 붙잡으면 스모크가 거짓 음성을 냅니다. _headers·Transform Rules·Workers가 섞이면 CSP·HSTS가 프리뷰와 프로덕에서 다르게 보입니다. 훅 본문만으로는 실패한 단계·재시도 한도를 팀 채널에 남기기 어렵습니다.

아래 표는 Netlify 훅 글과 역할을 나누고, 같은 원격 Mac 러너에서 curl 배치로 엣지 상태를 먼저 고정합니다.

02 Netlify 훅 대비 CF Pages에 특화된 지점

항목 Netlify Deploy Hook(참고) Cloudflare Pages(이 글)
훅·비밀 사이트·브랜치별 Build hook URL. Pages → Settings → Deploy hooks 고유 URL, 동일하게 Ingress에서 검증.
캐시 엣지 동작이 플랫폼별. 배포 후 Purge 범위·cf-cache-status·age를 curl NDJSON에 기록.
헤더 _headers·플러그인. 저장소 _headers + 대시보드 규칙을 정규화 JSON으로 맞춘 뒤 diff.
검증 루프 워밍·스모크·링크(별도 글). curl 병렬 배치 → 헤더 diff → Playwright webkit·chromium 스모크.

한 줄 요약: CF에서는 캐시 무효와 헤더 기준선을 먼저 맞춘 뒤 브라우저 스모크를 돌리면 재현성이 올라갑니다.

03 재현 런북(최소 단계)

  1. 훅·컨텍스트: CF_PAGES_COMMIT_SHA·프리뷰/프로덕 DEPLOY_URL·OPENCLAW_RUN_ID를 셸에 export합니다.
  2. Ingress: 공유 비밀·HMAC을 검증하고 즉시 202를 돌린 뒤 워커 큐에 Runner를 붙입니다.
  3. 캐시: 자산 지문이 바뀌면 URL 단위 또는 전역 Purge를 선택하고, 실패 시 한 단계 넓힙니다.
  4. curl 배치: 필수 경로·정적 번들 URL 목록을 xargs -P 또는 작은 Node 풀로 돌려 curl -fsSI로 상태·cf-cache-status를 NDJSON에 씁니다.
  5. Headers diff: curl -I 응답 헤더를 소문자 키로 정렬해 headers_observed.json으로 저장하고 headers_baseline.json과 구조 비교합니다.
  6. 스모크: npx playwright test tests/smoke --project=webkit --project=chromium를 배포 URL 기준으로 실행합니다.
  7. build_summary: .openclaw/reports/build_summary.json에 단계별 ms·실패 URL·exit_code를 넣고 Idempotency-Key: ${GIT_SHA}:cf-pages:${OPENCLAW_RUN_ID}:summary로 Webhook에 POST합니다.

04 OpenClaw 게이트웨이·실패 요약

게이트웨이는 단계마다 phase(purge|curl_batch|headers_diff|smoke|callback)를 붙이고, 중단 시 첫 실패 단계 한 줄·상위 세 URL·exit_code만 채팅·PR 코멘트에 보냅니다. 동일 커밋 재훅은 멱등 키로 흡수합니다.

토큰·훅 URL은 로그에 마스킹하고, 트레이스는 원격 Mac 로컬 경로 포인터만 공유합니다.

05 복붙용 근거(세 줄)

  • 워밍: 필수 경로 200·cf-cache-status 기대값(예: HIT 전략이면 문서화).
  • 헤더: CSP·strict-transport-security·permissions-policy 키가 baseline과 동일한지.
  • 요약 JSON: schema: "build_summary/v1", cf_pages, failed_phase, curl_errors[].

06 FAQ

증상 점검
스모크만 실패·curl은 200 프리뷰 호스트와 프로덕 별명이 다른지, Playwright baseURL이 최신 배포인지 확인.
헤더 diff가 랜덤 Workers가 붙은 경로와 순수 Pages 자산 경로를 분리해 baseline을 둡니다.

훅 직후에도 HTML이 옛날 버전처럼 보입니다.

Purge 범위·DEPLOY_URL·SW 캐시를 함께 봅니다. SW PR 요약 글의 캐시 키 점검과 연결하세요.

429·503이 curl 배치에서 납니다.

동시성을 낮추고 지수 백오프를 워밍 단계에만 적용합니다. 게이트웨이에 실패 단계와 샘플 URL 두 개를 남깁니다.

원격 Mac · CF Pages · curl·Headers·스모크

Deploy Hook 품질 루프를 7×24 Mac 러너에 얹으세요

Purge·헤더 diff·Playwright를 한 체인으로 묶을 때 원격 Mac이 가장 단순합니다. 로그인 없이 요금·도움말을 확인한 뒤 구매·대여로 노드를 고르세요. 홈은 여기입니다.

CF Pages Headers WebKit
원격 Mac — CF Pages Hook QA