openclaw doctor, 토큰·127.0.0.1·/health를 고정하세요. 헬스·LaunchAgent, 재시도, Discord 요약와 함께 보세요.
왜 여기서 막히나: 프록시·권한·요약 전송
- 프록시가 JSON 본문을 바꾸면 HMAC 불일치. 원시 바디로 검증.
- Jenkins와 게이트웨이가 다른 유저·
NODE_PATH면 프리플라이트만 흔들림. - 요약 POST가 레이트·TLS에 걸리면 빌드는 성공인데 알림만 비는 경우.
의사결정 소표: 인증 방식과 되돌림 채널
| 방식 | 장점 | 주의 |
|---|---|---|
| 경로 토큰 | 설정 단순 | URL 유출 시 즉시 교체 |
| HMAC+토큰 | 위조 완화 | 플러그인·수신측 동일 규칙 |
| HTTP 요약 | 대시보드 연동 쉬움 | 백오프 필수 |
| 보조 Webhook | Jenkins 상태만 갱신 | 멱등 키 권장 |
환경과 최소 권한 준비
Node 22.16+·24 LTS로 통일하고 openclaw doctor로 경로를 확인합니다. 게이트웨이는 127.0.0.1, 외부는 리버스 프록시만. 토큰은 퍼미션 600 파일 등에만. curl -fsS http://127.0.0.1:포트/health를 LaunchAgent로 주기 호출하세요. 에이전트·게이트웨이·쉘이 동일 유닉스 사용자인지 맞춥니다.
- 쉘과 launchd의
which node동일 - 프록시 본문 재작성 끔
- 작업 디스크 동시 클론 여유
웹훅 수신과 본 빌드를 분리하면 프리플라이트만 실패했을 때도 로그로 원인을 남기기 쉽습니다. 큐가 길어지면 WORK_ROOT를 빠른 볼륨으로 두고 동시 클론 수를 제한하세요. 장애 알림은 채널을 나누어 노이즈를 줄입니다.
Jenkins Generic Webhook과 서명·토큰 파라미터
Generic Webhook Trigger에 .../invoke?token=SECRET를 둡니다. 가능하면 파이프라인에서 공유 비밀을 헤더로 보내 OpenClaw에서 HMAC·타임스탬프로 검증. 플러그인이 정한 헤더 이름을 따르세요.
로그에 토큰·URL 마스킹. 알림 스텝은 실패와 분리.
OpenClaw 수신 후 composer·npm 프리플라이트 명령 템플릿
잡·빌드별 작업 디렉터리에서 클론 후 실행. 종료 코드·로그 꼬리를 요약 JSON에 포함.
모노레포는 하위 경로에서 반복. PHP·Node 버전 파일로 고정.
빌드 요약 회송 HTTP·Webhook과 실패 재시도
JSON으로 status·job·build·log_tail을 POST. 502·504·거부 시 이·사·팔 초 슬립 후 최대 세 번. 보조 Webhook은 멱등 키로 중복 방지. connect-timeout·max-time 병행. 수신측이 Retry-After를 주면 그 값을 우선 따르세요.
흔한 오류 FAQ
서명 검증 실패
비밀 문자열 일치·프록시 본문 변형·헤더 이름 스펙을 확인.
간헐 401
토큰 파일·프록시가 Authorization 드랍·구버전 토큰 캐시.
composer만 느림
COMPOSER_PROCESS_TIMEOUT·미러·NO_PROXY·캐시 권한.