composer/npm sauber auflösen, und eine kurze Zusammenfassung per HTTP/Webhook zurückgeben. Stand 2026 nach docs.openclaw.ai: Node 22.16+ oder 24 LTS, openclaw doctor, Dashboard-Token außerhalb von Git, Gateway auf 127.0.0.1, Healthcheck mit curl. Hier: Generic Webhook Trigger, Token/Signatur, Preflight-Vorlagen, Retry. Mehr: Healthcheck & LaunchAgent, Composer-Matrix, Hilfe.
Umgebung und minimale Berechtigungen
Typische Engpässe: zu mächtiger Gateway-Benutzer; launchd-PATH ≠ Login-Shell (openclaw doctor warnt); fehlender Healthcheck → 502 vom Tunnel.
Dienstbenutzer ohne sudo, Repo nur per Deploy-Key. OpenClaw: curl-Installer oder npm i -g openclaw@latest, onboard, doctor für Node 22.16+/24 LTS. Dashboard nur Loopback; Token in Keychain, chmod 600-Datei oder LaunchAgent-Env – nie in Logs. Healthcheck: curl -fsS http://127.0.0.1:<port>/health z. B. minütlich; bei Fehler Dienst neu starten.
| Komponente | Minimal sinnvolle Grenze (2026) |
|---|---|
| macOS-Benutzer | Kein Admin; getrennter Home; keine geteilte History |
| Jenkins-Token | Nur Job/Read bzw. gezielt Build-Infos – kein Admin |
| OpenClaw | Loopback + TLS/Tunnel nach außen |
| Anti-Pattern | Globale COMPOSER_AUTH/.npmrc für alle Projekte |
Checkliste: User → Doctor → Secret → Health → Test-curl mit statischem Token (ohne Jenkins).
Jenkins Generic Webhook und Signatur- bzw. Token-Parameter
Generic Webhook Trigger: Post-URL → TLS-Endpunkt → Tunnel/Relay auf 127.0.0.1 (vgl. Loopback-Gateway). Plugin-Token = JENKINS_WEBHOOK_SECRET im Handler. Optional Proxy-Authorization: Bearer. JSONPath auf $.build_url, $.job, $.branch filtert Spam-POSTs.
| Parameter | Zweck |
|---|---|
| Token | Symmetrische Prüfung (Query/Body je Version) |
| HMAC (optional) | Header X-Jenkins-Signature gegen Replay |
| IP-Whitelist | Nur Jenkins-Egress am Ingress |
| Ohne Filter | Jeder POST klont – Last & Risiko |
Test: kleine JSON-Payloads mit build_url, git_commit, ref vor Produktiv-Jobs.
OpenClaw-Seite: Empfang und Preflight-Kommandos (composer / npm)
Handler: Secret/Signatur prüfen, Payload loggen, pro build_url eigenes Verzeichnis, git fetch + shallow checkout auf Jenkins-git_commit.
Composer (Spiegel siehe Matrix):
composer install --no-dev --no-interaction --dry-run
npm/pnpm:
pnpm install --frozen-lockfile --prefer-offline
Exit 0 = ok; sonst erste stderr-Zeile in die Summary – keine vollen Manifeste loggen.
So bleibt der Jenkins-Hauptagenten frei von langen Download-Phasen; Fehler treten früh und mit reproduzierbarem Log auf dem Mac auf. Bei Monorepos können Sie Unterverzeichnisse per Payload-Feld subdir wählen, bevor Sie composer oder npm starten.
Build-Zusammenfassung per HTTP/Webhook und Fehler-Retry
Payload-Felder: status, job, build, commit, preflight_exit, kurzer Text. Ziel: zweiter Generic-Webhook, HTTP-Notification oder wie Discord-CI-Summary beschrieben.
-H 'Idempotency-Key: '"$BUILD_URL" \
--data '{"status":"ok","job":"'"$JOB"'","summary":"Preflight ok"}' \
"$SUMMARY_WEBHOOK_URL"
Retry: bei 429/502/503 2/4/8 s, max. ~5 Versuche, Cap ~60 s. Idempotency-Key = build_url. Zahlen: Preflight-Timeout oft 300–600 s; Healthcheck ~60 s.
Häufige Fehler – FAQ
401 auf dem Mac?
Plugin-Token ≠ Handler-Secret; Proxy-Authorization fehlt.
502 vom Tunnel?
Falscher Port / Prozess tot – lsof und Healthcheck-Port angleichen.
403 bei composer/npm?
Secrets nur für Dienstuser; NO_PROXY für interne Registry.
Doppelte Summaries?
Idempotency-Key aus build_url+Suffix preflight; Downstream deduplizieren.
Falsche Node-Version unter launchd?
LaunchAgent-PATH = Login-Shell oder absoluter node-Pfad.