En 2026, reliez un Jenkins Generic Webhook à une passerelle OpenClaw sur Mac distant pour un préflight Composer/npm puis un résumé HTTP avec retry borné. Ce HowTo couvre Node 22+ ou 24, jetons, /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.

Trois points de friction avant d’ouvrir Jenkins
  • 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.

CoucheRôleParamètre clé 2026
Jenkins Generic WebhookPOST JSON build + filtre JSONPathToken opaque dans l’URL
Reverse proxyTLS, rate limit entrantSNI + certificat renouvelé
OpenClaw gatewayVérif secret, orchestrationNode 22+ / 24 + jeton dashboard
Préflight shellcomposer / npmTimeouts 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_TOKENcurl depuis le réseau du contrôleur.

curl -sS -X POST \ 'https://mac-passerelle.example/hooks/jenkins?token=VOTRE_JETON' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer SECRET_PARTAGE' \ --data '{"build_number":"4821","git":{"branch":"main","commit":"a1b2c3d"},"job":"api-backend"}' \ -w '\nHTTP %{http_code}\n'

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 :

cd "$WORK" && composer validate --no-check-publish --ansi composer install --dry-run --no-interaction --no-ansi

Modèles — Node / npm (lockfile présent) :

cd "$WORK" && npm ci --dry-run

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.

curl -sS -X POST "$JENKINS_CALLBACK_URL" \ -H 'Content-Type: application/json' \ --data '{"build_id":"4821","status":"ok","preflight_ms":"42000","summary_text":"composer dry-run OK"}' \ --retry 3 --retry-delay 2 --retry-all-errors

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 plistPATH 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.

Synthèse : Node 22+, secrets hors Git, webhook Jenkins + secret, préflights bornés, callback avec retry maîtrisé. Pour une passerelle 24/7, voir les pages publiques achat, tarifs, aide, accueil — location Mac distant CI/OpenClaw sans login obligatoire.

Jenkins · OpenClaw · Mac distant

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).

Acheter un Mac distant Tarifs Centre d’aide
Apple Silicon
Sortie réseau prévisible
Support 24/7