Jenkins Slack Integration

1. Übersicht

Wenn unsere Teams für DevOps-Praktiken verantwortlich sind, müssen wir häufig Builds und andere automatisierte Jobs überwachen.

In diesem Tutorial erfahren Sie, wie Sie zwei beliebte Plattformen, Jenkins und Slack, so konfigurieren, dass sie zusammenarbeiten und uns mitteilen, was passiert, während unsere CI / CD-Pipelines ausgeführt werden.

2. Slack einrichten

Beginnen wir mit der Konfiguration von Slack, damit Jenkins Nachrichten an Slack senden kann. Dazu erstellen wir eine benutzerdefinierte Slack-App, für die ein Administratorkonto erforderlich ist .

In Slack erstellen wir eine Anwendung und generieren ein OAuth-Token:

  • Besuchen Sie //api.slack.com
  • Melden Sie sich am gewünschten Arbeitsbereich an
  • Klicken Sie auf die Schaltfläche Start Building
  • Benennen Sie die Anwendung Jenkins und klicken Sie auf App erstellen
  • Klicken Sie auf OAuth & Permissions
  • Im Bot Token Scopes Abschnitt, fügen Sie den Chat: Schreib Umfang
  • Klicken Sie auf die Schaltfläche App in Arbeitsbereich installieren
  • Klicken Sie auf die Schaltfläche Akzeptieren

Wenn dies erledigt ist, sehen wir einen Zusammenfassungsbildschirm:

Jetzt müssen wir das OAuth-Token zur Kenntnis nehmen - wir werden es später brauchen, wenn wir Jenkins konfigurieren. Wir sollten diese als vertrauliche Anmeldeinformationen behandeln und sie sicher aufbewahren.

Um das Slack-Setup abzuschließen, müssen wir den neuen Jenkins-Benutzer in die Kanäle einladen, die er verwenden möchte. Eine einfache Möglichkeit, dies zu tun, besteht darin, den neuen Benutzer mit dem @ -Zeichen in jedem Kanal zu erwähnen .

3. Jenkins einrichten

Zum Einrichten von Jenkins benötigen wir ein Administratorkonto .

Beginnen Sie, indem Sie sich bei Jenkins anmelden und zu Jenkins verwalten > Plugin-Manager navigieren .

Dann suchen wir auf der Registerkarte Verfügbar nach Slack :

Aktivieren Sie das Kontrollkästchen für Slack Notification und klicken Sie auf Installieren ohne Neustart .

Jetzt müssen wir neue Anmeldeinformationen konfigurieren. Navigieren Sie zu Jenkins> Anmeldeinformationen> System> Globale Anmeldeinformationen und fügen Sie einen neuen geheimen Text hinzu :

Wir werden den OAuth-Token von Slack in das geheime Feld legen . Wir sollten diesen Anmeldeinformationen auch eine aussagekräftige ID und Beschreibung geben, damit wir sie später leichter identifizieren können. Der Jenkins-Speicher für Anmeldeinformationen ist ein sicherer Ort, um dieses Token aufzubewahren.

Sobald wir die Anmeldeinformationen gespeichert haben, muss eine weitere globale Konfiguration festgelegt werden. Unter Jenkins> Jenkins verwalten> System konfigurieren müssen wir das Kontrollkästchen Benutzerdefinierter Slack-App-Bot-Benutzer im Abschnitt Slack aktivieren:

Nachdem wir das Jenkins-Setup abgeschlossen haben, schauen wir uns an, wie Jenkins-Jobs und -Pipelines für das Senden von Slack-Nachrichten konfiguriert werden.

4. Konfigurieren eines traditionellen Jenkins-Jobs

Herkömmliche Jenkins-Jobs führen normalerweise eine oder mehrere Aktionen aus, um ihre Ziele zu erreichen. Diese werden über die Jenkins-Benutzeroberfläche konfiguriert.

Um einen traditionellen Job in Slack zu integrieren, verwenden wir eine Post-Build-Aktion .

Lassen Sie uns einen Job auswählen oder einen neuen erstellen. Wenn wir das Aktionsmenü Nach dem Erstellen hinzufügen öffnen, finden wir Slack-Benachrichtigungen :

Nach der Auswahl stehen viele Eingaben für die Aktion "Slack Notification" zur Verfügung. Im Allgemeinen sind die meisten Standardwerte ausreichend. Es sind jedoch einige Informationen erforderlich:

  • Für welche Build-Phasen Nachrichten gesendet werden sollen (Start, Erfolg, Misserfolg usw.)
  • Der Name der zu verwendenden Anmeldeinformationen - die zuvor hinzugefügten
  • Der Slack-Kanalname oder die Mitglieds-ID, an die Nachrichten gesendet werden sollen

Auf Wunsch können wir auch zusätzliche Felder angeben, z. B. Festschreibungsinformationen, die für den Jenkins-Job verwendet werden, benutzerdefinierte Nachrichten, benutzerdefinierte Bot-Symbole und mehr:

Wenn wir Dinge über die Benutzeroberfläche einrichten, können wir die Schaltfläche Verbindung testen verwenden , um sicherzustellen, dass Jenkins Slack erreichen kann. Bei Erfolg wird im Slack-Kanal eine Testnachricht des Jenkins-Benutzers angezeigt:

Wenn die Meldung nicht angezeigt wird, sind die Jenkins-Protokolldateien zur Fehlerbehebung hilfreich. Im Allgemeinen müssen wir überprüfen, ob die Aktion nach dem Erstellen alle erforderlichen Felder enthält , ob das OAuth-Token korrekt kopiert wurde und ob dem Token bei der Konfiguration von Slack die richtigen Bereiche zugewiesen wurden.

5. Konfigurieren einer Jenkins-Pipeline

Jenkins Pipelines unterscheiden sich von traditionellen Jobs. Sie verwenden ein einzelnes Groovy-Skript, das in Stufen unterteilt ist, um einen Build zu definieren. Sie haben auch keine Post-Build-Aktionen, daher verwenden wir das Pipeline-Skript selbst, um Slack-Nachrichten zu senden .

Das folgende Snippet sendet eine Nachricht von einer Jenkins-Pipeline an Slack:

slackSend botUser: true, channel: 'builds', color: '#00ff00', message: 'Testing Jekins with Slack', tokenCredentialId: 'slack-token'

Genau wie beim herkömmlichen Jenkins-Job-Setup müssen wir weiterhin einen Kanalnamen und den Namen des zu verwendenden Berechtigungsnachweises angeben.

Über eine Jenkins-Pipeline können wir auch eine Vielzahl zusätzlicher Slack-Funktionen verwenden, z. B. das Hochladen von Dateien, Nachrichtenthreads und mehr.

Ein Nachteil bei der Verwendung von Jenkins-Pipelines ist, dass es keinen Testknopf gibt. Um die Integration mit Slack zu testen, müssen wir die gesamte Pipeline ausführen.

Beim ersten Einrichten können wir eine neue Pipeline erstellen, die nur den Befehl Slack enthält, während die Dinge funktionieren.

6. Zusätzliche Überlegungen

Nachdem wir Jenkins und Slack miteinander verbunden haben, gibt es einige zusätzliche Überlegungen.

Erstens kann eine einzelne Jenkins-Instanz mit mehreren Slack-Arbeitsbereichen kommunizieren . Wir müssen lediglich eine benutzerdefinierte Anwendung erstellen und für jeden Arbeitsbereich ein neues Token generieren. Solange jedes Token als eigener Berechtigungsnachweis in Jenkins gespeichert ist, können verschiedene Jobs in verschiedenen Arbeitsbereichen veröffentlicht werden.

In diesem Sinne kann ein anderer Jenkins-Job auf verschiedenen Slack-Kanälen veröffentlicht werden . Dies ist eine Einstellung pro Job in den von uns konfigurierten Post-Build-Aktionen . Beispielsweise können Jobs im Zusammenhang mit Software-Builds auf einem Nur-Entwicklungs-Kanal veröffentlicht werden. Und Jobs im Zusammenhang mit Test oder Produktion könnten auf ihre eigenen Kanäle gehen.

Während wir uns eines der beliebtesten Slack-Plugins für Jenkins angesehen haben, das eine genaue Kontrolle darüber bietet, was gesendet werden soll, gibt es eine Reihe anderer Plugins, die unterschiedlichen Zwecken dienen. Wenn beispielsweise jeder Jenkins-Job dieselbe Benachrichtigung senden soll, gibt es ein Global Slack Notifier- Plugin, das möglicherweise besser dafür geeignet ist.

7. Fazit

In diesem Artikel haben wir gesehen, wie Jenkins und Slack integriert werden, um Feedback zu unseren CI / CD-Pipelines zu erhalten.

Mit einem Jenkins-Plugin und einer benutzerdefinierten Slack-Anwendung konnten wir Nachrichten von Jenkins an Slack senden. Auf diese Weise können Teams den Status von Jenkins-Jobs erkennen und Probleme schneller beheben.