왜 여기서 막히나: 딜리버리·게이트웨이 큐·API 권한
- 프록시가 JSON을 바꾸면 HMAC이 깨집니다. raw body 검증.
- 핸들러에서 곧바로 clone하면 딜리버리 타임아웃·재시도 폭주. 즉시 2xx 후 워커로.
- Project API scope 과다·정책 밖이면 403. 최소 권한 재발급.
의사결정 소표: 검증·회송 채널·실행 모델
| 항목 | 이렇게 하면 | 조심할 점 |
|---|---|---|
| 시크릿 HMAC | CircleCI 공식 규칙과 일치 | 본문 변형 금지 |
| 경로 토큰+TLS | 구성이 단순 | URL 유출 시 즉시 회전 |
| 동기 스캔 | 구현 단순 | 타임아웃 |
| 즉시 응답+큐 | 딜리버리 안정 | 워커 필요 |
| Slack·Discord Webhook | 사람이 보기 쉬운 요약 | 멱등 키·백오프 |
전제 조건: Node·openclaw CLI·토큰·최소 권한
Node 22.16+·24 LTS를 launchd와 셸에서 동일하게 맞추고 openclaw doctor로 PATH·TLS를 확인합니다. openclaw CLI는 단일 설치 경로만 씁니다. docs.openclaw.ai대로 게이트웨이는 127.0.0.1, 대시보드 토큰은 chmod 600. 외부 수신은 SSH 터널 또는 승인된 리버스 프록시 한 경로만. Project API는 조회·트리거에 필요한 최소 scope만.
which node가 에이전트·게이트웨이·수동 셸에서 동일curl -fsS http://127.0.0.1:…/health가 주기적으로 성공- 기업 CA가 있으면
NODE_EXTRA_CA_CERTS를 plist에 명시 - WORK_ROOT SSD 여유·동시 클론 상한 정의
CircleCI Webhook과 검증 설정 단계
프로젝트 설정에 Webhook URL·콘솔 시크릿을 저장하고 이벤트는 workflow-completed 등 필요한 것만 남깁니다. 핸들러는 문서의 HMAC으로 raw body를 검증합니다. 아래는 운영 순서입니다.
- 1. 게이트웨이·토큰·
doctor - 2. 스테이징
curl로 서명 검증 - 3. UI 등록·Recent Deliveries
- 4. 운영 URL·알림·백오프 Runbook
엣지에서 본문 변형 없는지 스테이징에서 먼저 확인하세요.
OpenClaw 스킬·스크립트 템플릿: lockfile 파싱·요약
페이로드의 리비전으로 ${WORK_ROOT}/${WORKFLOW_ID}에 얕은 클론 후 package-lock.json·pnpm-lock.yaml·yarn.lock·Gemfile.lock을 찾아 기준 브랜치와 git diff 또는 dry-run으로 드리프트를 봅니다. 스킬이 종료 코드·요약·로그 꼬리를 JSON에 넣어 아웃바운드로 넘깁니다.
JSON 필드 예: workflow_id, revision, lockfile_status, log_tail. 본문 응답은 이미 2xx였다면 알림 채널로만 오류를 보냅니다.
CI 의존성 풀 시나리오와의 연결
게이트웨이 클론이 본 CircleCI 잡과 같은 PROXY·미러·registry를 쓰면 lockfile 결과가 로그와 맞습니다. NPM_CONFIG_CACHE 등으로 캐시 경로를 고정하고 동시 PR이 많으면 디스크·동시성 상한을 Runbook에 적어 둡니다.
흔한 오류 FAQ: 서명·타임아웃·권한
서명 검증이 끝까지 실패합니다
시크릿·문서의 HMAC이 같은지 확인합니다. 게이트웨이가 본문을 재직렬화하면 바이트가 달라지므로 raw body를 검증합니다.
딜리버리가 반복되며 타임아웃 납니다
즉시 2xx 후 큐로 넘겼는지 확인합니다. git clone --depth 1·미러·워커 수를 조정합니다.
Project API 403·읽기 전용
조직·프로젝트 바인딩·OIDC 정책을 확인하고 엔드포인트는 최소만 남깁니다.
openclaw doctor와 실제 런타임 Node가 다릅니다
plist에 NODE_BINARY 절대 경로·NODE_EXTRA_CA_CERTS를 넣습니다. curl -v로 API TLS를 확인합니다.