repo:commit_status_updated など)を受けたあと、依存プリフライトを走らせ、ビルド要約を HTTP で戻すまでを、コピー可能なパラメータ列で最小再現する手順です。インストールと排障、失敗時のリトライ設計と併読すると、launchd の PATH ずれや署名不一致の切り分けが速くなります。
前提条件:Node/OpenClaw onboard、トークン分離、最小権限
Node.js 22.16 以上または 24 系 LTS を対話シェルと launchd で同一バイナリに固定し、openclaw doctor で確認。CLI は npm i -g openclaw 等で入れ onboard 済みから開始します。
ゲートウェイは 127.0.0.1 のみ待受け、外向きはリバプロ+トンネル。トークンは分離:Bearer(例 OPENCLAW_GATEWAY_TOKEN)、Webhook Secret(BB_WEBHOOK_SECRET)、要約先 API(CALLBACK_TOKEN)。clone は App Password の Repositories: Read または読み取り専用 Deploy key のみ。
launchd の plist に EnvironmentVariables で PATH、NODE_EXTRA_CA_CERTS、NPM_CONFIG_CACHE、COMPOSER_HOME を明示し、シェル専用 nvm 依存を避けます。
Webhook 設定:URL・Secret・イベント・配信ログの見方
Repository settings → Webhooks で HTTPS URL と Secret(再表示不可のため即保管)を登録。イベントは Pipeline 完了系を主とし、必要なら repo:push/repo:commit_status_updated。マトリクスは集約後の一通知に寄せると再送が減ります。
ログに残すヘッダ:X-Event-Key、X-Hook-UUID、X-Attempt-Number、X-Request-UUID、X-Hub-Signature/X-Hub-Signature-256(sha256=)。Recent deliveries とゲートウェイ access ログを時刻で突合します。
プリフライトスクリプトの直列:浅い clone・dry-run・ログの tee
mktemp -d で隔離し git clone --depth 1、BITBUCKET_COMMIT またはペイロードの SHA で git checkout。共有ツリー連続実行は避けます。
PHP なら例えば次を 順に実行し、全体をファイルへ tee します(末尾数十行だけ要約 JSON に載せる想定)。
Node は npm ci --dry-run または本番寄りなら npm ci --prefer-offline --no-audit --no-fund。timeout 600 等で上限を付け、終了コードと秒数を要約へ。パターンは Jenkins 汎用 Webhook 版とも整合します。
要約の回帰:JSON ペイロード・Bearer・指数バックオフ・ ACK の切り離し
Webhook 応答はまず 速やかに 200。重処理はワーカーへ。戻し先 JSON に repository、commit、pipeline_uuid、preflight_ok、duration_sec、log_tail などを含めます。
502 等は 2・4・8 秒バックオフで最大 5 回。残りはディスク退避し cron 再送。TLS 誤りは NODE_EXTRA_CA_CERTS を先に確認します。
FAQ/エラーとログの当たり所
X-Hub-Signature が一致しない
JSON をパースしてから再シリアライズしたバイト列で HMAC していませんか。受信した生ボディに対して HMAC-SHA256 し、sha256= 以降をタイミングセーフに比較します。Secret の末尾改行・プロキシによるボディ改変も疑い、Recent deliveries の raw payload とゲートウェイの受信ログを突き合わせます。
Recent deliveries が 401/接続拒否
リバプロが Authorization: Bearer をゲートウェイまで透過しているか、URL パスに必須のプレフィックスが抜けていないかを確認します。Mac ローカルだけで試すときは curl -v で同一ヘッダを再現し、pf/ファイアウォールで 127.0.0.1 のみ許可しているかも見ます。
同じ Pipeline から Webhook が複数届く
Bitbucket は応答失敗時に X-Attempt-Number を増やして再送します。X-Request-UUID または pipeline UUID で処理済みを記録し、二重プリフライトを防ぎます。
プリフライトだけ失敗する
隔離ディレクトリの権限、COMPOSER_CACHE_DIR/npm キャッシュ、HTTPS プロキシ環境変数、package-lock.json/composer.lock の欠落を順に確認します。tee したログ全文パスを要約 JSON に含めておくと、後追いが速くなります。
まとめ:生ボディ HMAC・イベント絞り込み・隔離プリフライト・Bearer 付き要約 POST・指数バックオフが、Bitbucket × OpenClaw の最小安定セットです。常駐ゲートウェイ向けのマシンは MacPull ホーム、契約・リージョンは 購入ページ、SSH や初期セットは ヘルプセンター を参照ください(いずれもログイン不要)。一覧は 技術ブログ から。