Alle Artikel
Repository-Events, die als Webhooks zu einem lokalen Entwicklungs-Laptop strömen.
GitHubwebhook debugginglocal testingCI/CD

GitHub-Webhooks lokal testen: kompletter Leitfaden

Das lokale Testen von GitHub-Webhooks lässt dich Push-, Pull-Request-, Issue- und Workflow-Events auf deiner Maschine empfangen, ohne nach Staging zu deployen. Starte einen localhost-Tunnel, registriere die HTTPS-URL in deinen GitHub-App- oder Repository-Einstellungen und debugge Handler mit voller Signaturprüfung.

Warum GitHub-Webhooks einen öffentlichen Endpunkt brauchen

GitHub liefert Webhook-Events als HTTP-POST-Requests an eine konfigurierte URL. Deine lokale Maschine auf 127.0.0.1 ist von GitHubs Servern nicht erreichbar. Ein localhost-Tunnel liefert den öffentlichen HTTPS-Endpunkt, den GitHub verlangt.

GitHub Apps vs. Repository-Webhooks

Repository-Webhooks

Pro Repository unter Settings → Webhooks konfiguriert. Gut, um die Event-Handler eines einzelnen Repos während der Feature-Entwicklung zu testen.

GitHub-App-Webhooks

Auf App-Ebene in deinen GitHub-App-Einstellungen konfiguriert. Nötig, wenn du Integrationen baust, die mehrere Repositories oder Organisationen bedienen.

Beide Lieferarten nutzen HMAC-SHA256-Signaturprüfung über den X-Hub-Signature-256-Header.

Schritt für Schritt: GitHub-Webhooks lokal testen

  1. Starte deine lokale App mit einem Webhook-Endpunkt (zum Beispiel /api/webhooks/github).
  2. Führe npx portpreview 3000 aus, um eine öffentliche HTTPS-URL zu erhalten.
  3. Füge in GitHub die Tunnel-URL plus deinen Webhook-Pfad als Payload-URL hinzu.
  4. Setze den Content-Type auf application/json und wähle die zu empfangenden Events.
  5. Erzeuge ein Webhook-Secret und lege es in deinen lokalen Umgebungsvariablen ab.
  6. Löse Events aus (Commit pushen, PR öffnen, Issue erstellen) und inspiziere die Deliveries.
  7. Prüfe, dass dein Handler die Signatur validiert und innerhalb von 10 Sekunden eine 2xx-Antwort zurückgibt.

GitHub-Webhook-Signaturen lokal verifizieren

GitHub signiert jedes Payload mit deinem Webhook-Secret. Dein Handler muss:

  • Den rohen Request-Body vor dem JSON-Parsing lesen.
  • HMAC-SHA256 mit deinem Secret berechnen.
  • Mit dem X-Hub-Signature-256-Header per zeitkonstantem Vergleich abgleichen.

Tunnel-Tools, die die Original-Header bewahren, lassen dich den echten Verifizierungspfad testen. Überspringe Signaturprüfungen während der lokalen Entwicklung nie.

Events, die du lokal testen solltest

  • push — CI-Trigger-Logik, Branch-Protection-Hooks, Deployment-Pipelines.
  • pull_request — Review-Automation, Label-Bots, Merge-Checks.
  • issues — Issue-Tracker-Sync, Zuweisungs-Workflows.
  • installation — GitHub-App-Install-/Uninstall-Lebenszyklus.
  • workflow_run — Post-CI-Automation und Artefakt-Verarbeitung.

Fehlgeschlagene GitHub-Webhook-Deliveries debuggen

GitHub wiederholt fehlgeschlagene Deliveries mit exponentiellem Backoff. Häufige Fehler beim lokalen Testen:

  • Handler-Timeout (GitHub erwartet Antwort binnen 10 Sekunden).
  • Signatur-Mismatch durch Parsen des Bodys vor der Verifizierung.
  • Tunnel-Session abgelaufen, während GitHub wiederholt.
  • Falscher Event-Filter — der Handler empfängt Events, die er nicht verarbeitet.

Nutze Webhook-Replay, um fehlgeschlagene Deliveries erneut zu testen, ohne neue Commits zu pushen.

GitHub-Webhook-Testing vs. smee.io

smee.io ist ein beliebter GitHub-Webhook-Proxy für die lokale Entwicklung. Es funktioniert gut für einfaches Weiterleiten, aber es fehlen eingebaute Request-Inspektion und Replay. PortPreview kombiniert Tunneling mit Capture und Replay in einem Tool. Einen breiteren Webhook-Debugging-Leitfaden findest du unter wie man Webhooks lokal debuggt.

Tritt der PortPreview-Warteliste bei für GitHub-Webhook-Testing mit eingebauter Request-Sichtbarkeit.

Häufig gestellte Fragen

Wie teste ich GitHub-Webhooks auf localhost?
Starte einen localhost-Tunnel mit PortPreview, füge die HTTPS-URL als Webhook-Payload-URL in deinen GitHub-Repository- oder App-Einstellungen hinzu, löse dann Events aus und inspiziere jede Delivery.
Funktioniert die GitHub-Webhook-Signaturprüfung mit einem Tunnel?
Ja. PortPreview bewahrt den X-Hub-Signature-256-Header und den rohen Request-Body, sodass die HMAC-Verifizierung genauso funktioniert wie in Produktion.
Was passiert, wenn mein lokaler Handler für GitHub zu langsam ist?
GitHub erwartet eine 2xx-Antwort binnen 10 Sekunden, sonst markiert es die Delivery als fehlgeschlagen und wiederholt. Nutze asynchrone Verarbeitung für lang laufende Tasks und gib sofort 202 zurück.