Ce guide 2026 relie TeamCity à OpenClaw sur Mac distant : webhook, préflight, dérive lockfile, puis résumé REST. Checklist, matrice, étapes et FAQ. Voir GitHub Checks & lockfile, Jenkins Webhook et passerelle.

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.

Trois frictions typiques avant d’exposer l’URL publique
  • Identité : utilisateur service, accès Git lecture seule, aucun sudo large sur le handler.
  • Concurrence : un workdir par buildId TeamCity 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é.

CoucheRôleParamètre clé 2026
TeamCityPOST JSON (feature ou webhook)Timeout > préflight
Proxy TLSTerminaison, limite débitSNI, certificat à jour
OpenClawSecret, préflight, lockfileNode 22+, idempotence
REST TeamCityCommentaire / statutPAT 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.

Étapes reproductibles (ordre conseillé)
  1. Provisionner le Mac (SSH), installer Node 22+, OpenClaw, exécuter onboard et doctor sous l’utilisateur service.
  2. Configurer le LaunchAgent ou le daemon officiel ; charger secrets depuis un fichier 600 ; vérifier launchctl print après reboot.
  3. Publier la passerelle derrière TLS ; tester /health puis un POST réel depuis le sous-réseau TeamCity.
  4. Créer le compte ou PAT TeamCity à portée minimale ; noter l’URL REST et le schéma d’auth retenu.
  5. Ajouter la feature HTTP TeamCity pointant vers le hook ; activer Bearer + option HMAC ; fixer timeout > pire préflight.
  6. Implémenter le handler : checkout, préflight, git diff lockfile, journalisation buildId.
  7. 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 :

curl -sS -X POST 'https://passerelle.example/hooks/teamcity?token=HOOK_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer SECRET_PARTAGE' \ --data '{"buildId":"12345","buildTypeId":"Projet_Build","branchName":"main","revision":"a1b2c3d"}' \ -w '\nHTTP %{http_code}\n'

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 :

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

Pour Node, avec lockfile versionné :

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

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.

curl -sS -X POST "$TEAMCITY_REST_URL/app/rest/..." \ -u "$TC_USER:$TC_PASS" \ -H 'Content-Type: application/json' \ --data '{"text":"preflight OK, lockfile aligné","status":"INFO"}' \ --retry 3 --retry-delay 2 --retry-all-errors

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.

Résumé : Node 22+, daemon, secrets hors Git ; webhook validé ; préflight + lockfile ; REST avec retry. Achat, tarifs, aide, accueil, blog sans login.

TeamCity · OpenClaw · Mac distant

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

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