Wie kann ich Webhooks in einer GitHub App konfigurieren und verwenden?
- Erstellen und Konfigurieren einer GitHub App
- Auswahl der Ereignisse für Webhooks
- Installation der GitHub App in einem Repository oder einer Organisation
- Verarbeiten der Webhook-Anfragen
- Beispiel eines einfachen Webhook-Handlers
- Zusammenfassung
Webhooks sind eine essenzielle Komponente, um Ereignisse von GitHub-Repositorys oder Organisationen automatisiert an externe Systeme zu senden. Wenn du eine GitHub App erstellst, kannst du Webhooks konfigurieren, damit deine App über verschiedene Aktivitäten informiert wird, wie etwa Commits, Pull Requests oder Issues. Im Folgenden wird ausführlich beschrieben, wie du Webhooks in einer GitHub App einrichtest und wie du sie sinnvoll nutzt.
Erstellen und Konfigurieren einer GitHub App
Der erste Schritt besteht darin, eine neue GitHub App zu erstellen. Dies geschieht über die GitHub-Weboberfläche unter https://github.com/settings/apps bzw. für Organisationen unter deren Einstellungen. Dort klickst du auf Neue GitHub App erstellen und gibst grundlegende Informationen wie Namen, Beschreibung, Homepage-URL und Callback-URL ein.
Wichtig für die Webhook-Nutzung ist die Webhook-URL. Diese gibt die Adresse an, an die GitHub Ereignisinformationen als HTTP POST gesendet werden. Du solltest eine öffentlich erreichbare URL eintragen, auf die dein Server hört und Anfragen verarbeiten kann. Zusätzlich kannst du einen sogenannten Webhook-Secret-Schlüssel setzen. Dieser Schlüssel gibt dir später die Möglichkeit, die Integrität der eingehenden Webhook-Anfragen zu prüfen, indem du die Signatur validierst.
Auswahl der Ereignisse für Webhooks
Beim Erstellen der GitHub App kannst du festlegen, für welche Ereignisse du Webhooks erhalten möchtest. GitHub bietet eine Vielzahl von Ereignistypen, zum Beispiel push, pull_request, issues oder release. Du kannst alle Events abonnieren oder nur die für deine App relevanten.
Je feinmaschiger du die Ereignisse auswählst, desto gezielter und effizienter kann deine App auf spezifische Ereignisse reagieren. Es reduziert außerdem unnötigen Traffic und Verarbeitungsaufwand.
Installation der GitHub App in einem Repository oder einer Organisation
Nachdem die App erstellt und konfiguriert wurde, musst du sie in einem Repository oder einer Organisation installieren. Dies ist notwendig, damit die App Zugriff auf die Daten hat und die Webhooks aktiviert werden. Bei der Installation kannst du die Rechte und Zugriffsbereiche der App konfigurieren.
Nach der Installation sendet GitHub Webhook-Nachrichten entsprechend der definierten Events an die angegebenen Webhook-URL.
Verarbeiten der Webhook-Anfragen
Dein Server oder Dienst muss so eingerichtet sein, dass er eingehende POST-Anfragen auf der Webhook-URL empfangen und verarbeiten kann. Die Nutzlast ist im JSON-Format und enthält detaillierte Informationen zum jeweiligen Ereignis.
Wichtig ist es, die eingehenden Nachrichten zuerst auf ihre Validität zu überprüfen. Hierzu kannst du den Webhook-Secret verwenden, um die mitgesendete Signatur (im Header X-Hub-Signature-256) gegen den Hash deiner Payload zu prüfen. So stellst du sicher, dass die Anfrage wirklich von GitHub stammt und nicht manipuliert wurde.
Im Anschluss kannst du dann je nach Event-Typ entsprechende Aktionen auslösen, wie etwa das Aktualisieren von Datenbanken, Senden von Benachrichtigungen oder Starten von Build-Prozessen.
Beispiel eines einfachen Webhook-Handlers
Ein grundlegender Webhook-Handler in Node.js könnte folgendermaßen aussehen:
const http = require("http");const crypto = require("crypto");const secret = "dein-webhook-secret";function verifySignature(req, body) { const signature = req.headers ; if (!signature) return false; const hmac = crypto.createHmac("sha256", secret); const digest = "sha256=" + hmac.update(body).digest("hex"); return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(digest));}const server = http.createServer((req, res) => { if (req.method === "POST" && req.url === "/webhook") { let body = ""; req.on("data", chunk => { body += chunk; }); req.on("end", () => { if (!verifySignature(req, body)) { res.statusCode = 401; res.end("Invalid signature"); return; } const event = req.headers ; const payload = JSON.parse(body); console.log("Empfangenes Event:", event); // Hier erweitern mit spezifischer Ereignisbehandlung res.statusCode = 200; res.end("Webhook empfangen"); }); } else { res.statusCode = 404; res.end(); }});server.listen(3000, () => { console.log("Webhook-Listener läuft auf Port 3000");});Zusammenfassung
Das Konfigurieren von Webhooks in einer GitHub App beginnt mit der Erstellung der App, der Angabe einer Webhook-URL und eines Secrets sowie der Auswahl der überwachten Ereignisse. Nach der Installation in einem Repository oder einer Organisation werden HTTP POST-Anfragen mit Ereignisdaten an deine URL gesendet. Diese Nachrichten sollten sicher validiert und in deiner Server-Logik verarbeitet werden.
Durch die korrekte Einrichtung kannst du so automatisiert auf GitHub-Aktivitäten reagieren und deine eigenen Workflows und Integrationen effizient gestalten.
