Passerelle OpenClaw : Node 22+, onboarding et démon launchd
Installez OpenClaw (docs.openclaw.ai, curl ou npm i -g openclaw) avec Node 22 LTS minimum. openclaw onboard puis openclaw doctor ; en prod, onboard --install-daemon ou LaunchAgent. Passerelle 127.0.0.1 + proxy TLS ; jetons dans un fichier 600 lu par le plist. /health ne suffit pas : testez aussi un curl depuis le réseau TeamCity.
- Identité : utilisateur service, accès Git lecture seule, aucun sudo large sur le handler.
- Concurrence : un
workdirparbuildIdTeamCity pour éviter les courses sur le checkout. - Traçabilité : journaux avec
buildId, durée, extraits stderr sans jetons ni mots de passe.
Checklist : node -v SSH = daemon ; doctor vert ; HTTPS joignable ; env après reboot ; timeout TeamCity > pire préflight mesuré.
| Couche | Rôle | Paramètre clé 2026 |
|---|---|---|
| TeamCity | POST JSON (feature ou webhook) | Timeout > préflight |
| Proxy TLS | Terminaison, limite débit | SNI, certificat à jour |
| OpenClaw | Secret, préflight, lockfile | Node 22+, idempotence |
| REST TeamCity | Commentaire / statut | PAT projet + httpAuth |
Un Mac distant MacPull stabilise réseau et disque pour un nœud CI amont : préflights et tirages lourds avant la file TeamCity, moins de builds rouges « fantômes ». Les équipes gagnent une fenêtre de contrôle avant les agents partagés : latence prévisible vers Git et registres, disque NVMe pour caches npm ou Composer, et un démon qui ne dépend pas d’une session utilisateur graphique.
- Provisionner le Mac (SSH), installer Node 22+, OpenClaw, exécuter
onboardetdoctorsous l’utilisateur service. - Configurer le LaunchAgent ou le daemon officiel ; charger secrets depuis un fichier
600; vérifierlaunchctl printaprès reboot. - Publier la passerelle derrière TLS ; tester
/healthpuis un POST réel depuis le sous-réseau TeamCity. - Créer le compte ou PAT TeamCity à portée minimale ; noter l’URL REST et le schéma d’auth retenu.
- Ajouter la feature HTTP TeamCity pointant vers le hook ; activer
Bearer+ option HMAC ; fixer timeout > pire préflight. - Implémenter le handler : checkout, préflight,
git difflockfile, journalisationbuildId. - Poster le résumé vers TeamCity avec retry borné ; surveiller une file locale des échecs.
TeamCity : jetons moindre privilège et validation du webhook
Utilisateur ou PAT limité au projet : droits pour voir les builds et appeler la REST nécessaire au commentaire ou à la métadonnée choisie — refusez l’administration globale et les pools partagés sans quota. HTTP sortant vers …/hooks/teamcity avec Authorization: Bearer et, si possible, une signature HMAC du corps (X-Signature) recalculée côté OpenClaw pour repousser les rejeux externes. Le JSON minimal doit inclure buildId, buildTypeId, branchName, revision et webUrl afin de corréler immédiatement les journaux Mac et la page build TeamCity.
Test depuis TeamCity :
200/202 OK ; 401 = secret, chemin ou en-tête manquant ; synchronisez NTP si la signature a une courte fenêtre. Limitez la taille du POST : les journaux détaillés passent par un artefact TeamCity ou une URL signée courte durée, jamais par un corps JSON volumineux qui saturerait le proxy.
Handler OpenClaw : préflight, dérive lockfile et journalisation
Handler : secret, checkout revision, préflight :
Pour Node, avec lockfile versionné :
Dérive lockfile : après git fetch, comparez le lock au merge-base attendu — par exemple git diff --exit-code origin/main -- package-lock.json ou l’équivalent composer.lock — pour attraper tôt un merge sans mise à jour de verrou. Les registres privés se configurent via COMPOSER_AUTH ou les variables npm_config_ injectées dans l’environnement du daemon, plutôt qu’en argument de ligne de commande où ils fuiteraient dans ps. Si le préflight dépasse la fenêtre HTTP du webhook, répondez 202 Accepted avec un correlationId, poursuivez en tâche de fond, puis seulement après appelez la REST TeamCity.
Sous charge, sérialisez par dépôt ou utilisez une file locale : deux jobs parallèles sur le même clone corrompent le diff lockfile et produisent des faux négatifs.
Résumé vers TeamCity : REST, retry 2-4-8 s et idempotence
POST REST (commentaire ou statut) : buildId, status, preflightMs, summaryText, lockfileDrift.
En production, remplacez le simple curl --retry par un client avec backoff 2s / 4s / 8s, jitter léger, plafond de trois tentatives sur 5xx et 429, et aucun retry sur 401 ou 403 afin d’éviter le verrouillage de compte. Conservez une file locale des corps échoués (secrets masqués) pour le support.
Pour une passerelle 24/7, un Mac cloud MacPull offre démon stable, sortie réseau cohérente et pages publiques achat / tarifs sans friction matérielle.
FAQ — erreurs fréquentes et lecture des journaux
401 callback : PAT, httpAuth, portée buildType — fix puis plist.
npm absent sous OpenClaw : PATH daemon ≠ shell ; binaires absolus.
Lockfile vert, CI rouge : mauvaise branche ou fetch ; alignez TeamCity.
Timeouts : DNS/MTU ; curl -w pour timings.
Doublons : buildId+eventId, dédup 5 min.
Louez un Mac cloud pour votre préflight TeamCity amont
Pages ouvertes sans login : accueil, centre d’aide, achat, tarifs, blog technique (série OpenClaw 2026).