リモート Mac の OpenClaw が Azure DevOps の ビルド完了 を サービスフックで受け、共有秘密を先に検証し 依存プリフェッチ後に 要約ジェイソンを戻します。Node 二二以上 と
openclaw onboard、ループバックとポート実測が前提です。硬化・失敗回復・一覧参照。
運用で踏みがちな三つの壁
1. 履歴は二〇〇でも上流が四〇四に見える経路不一致。2. 外向きが多リージョンで発信元制限が破綻しがち。3. 軽量本文で改変点が省略され追跡取得が要る、の三点です。
判断表:共用エージェントとリモート Mac 前置
| 観点 | 共用エージェント | リモート Mac 前置 |
|---|---|---|
| 隔離 | 再利用で混線 | ビルドごとに作業領域固定 |
| 受信 | 外向きのみでは重い | ループバック終端で生ボディ保持 |
| 検証 | 秘密運用が分散 | ゲートウェイで一元照合 |
| 説明 | 既存へ載せやすい | 本流前の失敗削減を説明しやすい |
手順チェックリストと受入観点
六ステップ
- Node 二二以上
openclaw doctor緑・常駐・ポート実測 - 127.0.0.1 のみ、TLS で認可欠落を防ぐ
- トークンは読取り最小とファイル六〇〇
- フックは完了と定義、ベーシックかヘッダ秘密
- 隔離・浅取得・
npm ci --dry-runをtee - 戻しは五〇二/四二九のみ二・四・八秒、四〇一/四〇三は止める
インストールとゲートウェイ:Node・ポート・常駐
Node 二二以上 をシェルと launchd で揃え openclaw onboard 後に待受ポートを実測。plist に PATH と NODE_BINARY を絶対パス、秘密は六〇〇。
openclaw doctor
curl -sf "http://127.0.0.1:${OPENCLAW_GATEWAY_PORT}/" -o /dev/null
サービスフック項目(ビルド完了)
イベントはビルド完了、フィルターは定義識別子、詳細に資源識別子。資格情報はベーシックまたは追加ヘッダで共有秘密です。
| 項目 | 要点 | 受信 |
|---|---|---|
| イベント | 完了のみ | 他棄却 |
| フィルター | 定義 | 突合 |
| 秘密 | 共有 | 比較 |
ハンドラ:秘密検証と隔離プリフェッチ
Authorization を timing-safe に比較しヘッダ秘密も突合後に JSON 解析。mktemp -d で隔離し浅取得と乾走査を tee。
WORKDIR="$(mktemp -d /tmp/ado-openclaw.XXXXXX)"
git -C "$WORKDIR" clone --depth 1 --branch "$BRANCH" \
"https://:${ADO_READ_PAT}@dev.azure.com/${ORG}/${PROJECT}/_git/${REPO}" .
npm ci --dry-run 2>&1 | tee "$WORKDIR/prefetch.log"
要約戻し・退避・ログひな形
戻しは ジェイソン 同一形。五〇二/四二九のみ二・四・八秒最大三回、四〇一/四〇三は設計見直しのみ。
SUMMARY_JSON=$(jq -n --arg p "$PROJECT" --argjson id "$BUILD_ID" \
--argjson ms "$PREFETCH_MS" --argjson ex "$EXIT_CODE" \
--arg tail "$(tail -n 40 "$WORKDIR/prefetch.log")" \
'{project:$p,buildId:id,prefetchMs:ms,exitCode:ex,logTail:$tail}')
for s in 2 4 8; do
c=$(curl -sS -o /tmp/r.txt -w "%{http_code}" -m 25 -H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADO_WRITE_PAT}" -d "$SUMMARY_JSON" "$CALLBACK_URL") || c=000
[[ "$c" != "502" && "$c" != "429" ]] && break; sleep "$s"
done
よくある質問 FAQ
履歴は成功でも届かない
フィルターとプロキシを疑い同一ヘッダでエージェントから再現します。
共有秘密不一致
改行と空白を整え timing-safe で比較し認可ヘッダ欠落を確認します。
四〇一が続く
トークンスコープと失効を見直し四〇一と四〇三は再試行しません。