/health et dépannage. Aller plus loin : déploiement passerelle, LaunchAgent & healthcheck, retry OpenClaw.
Environnement et préparation moindre privilège
Installez OpenClaw (docs.openclaw.ai) via curl ou npm install -g openclaw. En 2026, visez Node 22 LTS minimum et Node 24 si la release le recommande. openclaw onboard puis openclaw doctor sous le même utilisateur que launchd : un PATH SSH différent du daemon casse souvent le préflight. Passez la passerelle en 127.0.0.1 + proxy TLS public ; jetons dashboard et bearer dans un fichier 600 chargé par le plist. La sonde /health ne couvre pas le WAN : ajoutez un curl externe après ouverture pare-feu.
- Identité : compte service, clés lecture seule, pas de sudo large sur le handler.
- Workdir : un répertoire par dépôt, nettoyage post-préflight.
- Logs :
build_id, durée, stderr tronqué, zéro secret.
Checklist : node -v identique SSH/daemon ; openclaw doctor vert ; URL joignable depuis Jenkins ; env 600 avec secret hook ; launchctl validé après reboot.
| Couche | Rôle | Paramètre clé 2026 |
|---|---|---|
| Jenkins Generic Webhook | POST JSON build + filtre JSONPath | Token opaque dans l’URL |
| Reverse proxy | TLS, rate limit entrant | SNI + certificat renouvelé |
| OpenClaw gateway | Vérif secret, orchestration | Node 22+ / 24 + jeton dashboard |
| Préflight shell | composer / npm | Timeouts explicites < deadline Jenkins |
Pour votre runbook interne : prévoir 30 à 120 secondes de préflight sur un dépôt moyen, plafonner les callbacks à trois essais avant escalade humaine, et planifier une rotation trimestrielle des jetons lorsque plus de cinq opérateurs accèdent à Jenkins ou au Mac.
Jenkins Generic Webhook et paramètres de validation (token, secret, corps)
Plugin Generic Webhook Trigger : URL …/invoke?token=VOTRE_JETON et variables JSONPath ($.build_number, $.git.branch). Cas traité ici : Jenkins POST vers la passerelle Mac après événement SCM.
Signature / secret : token query + Authorization: Bearer, X-Webhook-Signature HMAC-SHA256, ou clé proxy ; rejeter avant OpenClaw si mismatch. Mini parcours : token 32 octets → Jenkins + OPENCLAW_EXPECTED_TOKEN → curl depuis le réseau du contrôleur.
Réponse attendue 200/202 selon handler ; 401 = token ou bearer incorrect. Timeout Jenkins > pire préflight mesuré sur sept jours.
Multi-jobs sur un même contrôleur : préfixez le token par le dossier ou le nom du pipeline pour éviter les collisions, journalisez quel job a émis le POST, et utilisez les filtres JSONPath pour n’accepter que les branches autorisées.
Côté OpenClaw : réception, workdir et modèles de commandes préflight
Handler : parser JSON, vérifier token/secret, checkout commit dans $WORK, lancer préflights, renvoyer statut + extraits logs. Chemins absolus node/npm/composer dans le plist.
Modèles — PHP / Composer :
Modèles — Node / npm (lockfile présent) :
Registres privés : COMPOSER_AUTH, npm_config_registry. Si le préflight est long : réponse 202 + id corrélation, puis callback § suivant.
Builds en rafale sur un même dépôt : sérialisez les préflights ou utilisez un workdir par build_id pour ne pas écraser le checkout des pipelines voisins.
Résumé de build : HTTP, second webhook Jenkins et politique de retry
Envoyez une synthèse JSON vers Jenkins (notification HTTP, servlet interne) ou bus d’événements. Schéma stable : build_id, status, preflight_ms, summary_text.
Prototype : curl --retry. Prod : backoff 2s / 4s / 8s + jitter, max trois essais sur 5xx/429, pas de retry sur 401/403 ; file locale des échecs sur le Mac.
FAQ — erreurs courantes et lecture des journaux
401/403 : token query et bearer caractère à caractère ; espaces parasites dans la variable Jenkins ; NTP si signature courte durée.
Timeout Jenkins vs SSH OK : DNS/MTU contrôleur ; timeout HTTP explicite + connect-timeout au test curl.
npm/composer introuvables : pas de .zshrc dans plist — PATH complet ou binaires absolus.
Doublons callback : build_id + event_id ; dédup cinq minutes côté récepteur.
Payload trop volumineux : limitez le POST aux métadonnées (commit, branche, numéro de build) et exposez les journaux longs via URL signée courte durée plutôt que dans le corps JSON.
Louez un Mac cloud pour une passerelle OpenClaw toujours joignable
Pages ouvertes sans login : accueil, centre d’aide, achat, tarifs, blog technique (guides passerelle et CI).