Jenkins Slack-integratie

1. Overzicht

Wanneer onze teams verantwoordelijk zijn voor DevOps-praktijken, moeten we vaak builds en andere geautomatiseerde taken volgen.

In deze tutorial zullen we zien hoe we twee populaire platforms, Jenkins en Slack, kunnen configureren om samen te werken en ons vertellen wat er gebeurt terwijl onze CI / CD-pijplijnen actief zijn.

2. Slack opzetten

Laten we beginnen met het configureren van Slack zodat Jenkins er berichten naartoe kan sturen. Om dit te doen, we maken een aangepaste Slack-app, waarvoor een beheerdersaccount vereist is.

In Slack maken we een applicatie en genereren we een OAuth-token:

  • Bezoek //api.slack.com
  • Log in op de gewenste werkruimte
  • Klik op de Begin met bouwen knop
  • Geef de toepassing een naam Jenkins en klik Maak een app
  • Klik op OAuth en machtigingen
  • In de Bot-tokenbereiken sectie, voeg het chat: schrijf reikwijdte
  • Klik op de Installeer de app in de werkruimte knop
  • Klik op de Aanvaarden knop

Wanneer dit is gebeurd, zien we een overzichtsscherm:

Nu moeten we kennis nemen van het OAuth-token - we hebben het later nodig wanneer we Jenkins configureren. We moeten deze beschouwen als gevoelige gegevens en bewaar ze veilig ..

Om de Slack-installatie te voltooien, moeten we de nieuwe Jenkins-gebruiker uitnodigen voor de kanalen die we willen gebruiken. Een eenvoudige manier om dit te doen, is door de nieuwe gebruiker te vermelden met de extensie @ karakter binnen elk kanaal.

3. Jenkins opzetten

Om Jenkins in te stellen, we hebben een beheerdersaccount nodig.

Laten we eerst beginnen door in te loggen op Jenkins en naar Beheer Jenkins >plugin manager.

Vervolgens op de Beschikbaar tabblad, zullen we zoeken naar Slap:

Laten we het selectievakje voor selecteren Slack-melding en klik Installeer zonder opnieuw op te starten.

Nu moeten we nieuwe inloggegevens configureren. Laten we naar Jenkins> Inloggegevens> Systeem> Globale inloggegevens en voeg een nieuw Geheime tekst referentie:

We plaatsen het OAuth-token van Slack in het Geheim veld-. We moeten deze inloggegevens ook een zinvolle ID en beschrijving geven, zodat we ze later gemakkelijk kunnen identificeren. Het Jenkins-referentiearchief is een veilige plek om dit token te bewaren.

Zodra we de inloggegevens hebben opgeslagen, is er nog een algemene configuratie om in te stellen. Onder Jenkins> Jenkins beheren> Systeem configurerenmoeten we de Aangepaste slappe app-botgebruiker selectievakje onder het Slap sectie:

Nu we de installatie van Jenkins hebben voltooid, gaan we kijken hoe we Jenkins-taken en -pijplijnen kunnen configureren om Slack-berichten te verzenden.

4. Een traditionele Jenkins-taak configureren

Traditionele Jenkins-taken voeren meestal een of meer acties uit om hun doelen te bereiken. Deze worden geconfigureerd via de gebruikersinterface van Jenkins.

Om een ​​traditionele baan te integreren met Slack, we zullen een actie na het bouwen gebruiken.

Laten we een baan kiezen of een nieuwe maken. Als we het Voeg actie na het bouwen toe menu, we zullen vinden Slack-meldingen:

Eenmaal geselecteerd, zijn er veel beschikbare invoer voor de Slack Notification-actie. Over het algemeen zijn de meeste standaardwaarden voldoende. Er zijn echter een paar vereiste stukjes informatie:

  • Voor welke bouwfasen berichten moeten worden verzonden (start, succes, mislukking, enz.)
  • De naam van de te gebruiken inloggegevens - degene die we eerder hebben toegevoegd
  • De Slack-kanaalnaam of lid-ID waarnaar berichten moeten worden verzonden

We kunnen desgewenst ook extra velden specificeren, zoals commit-informatie die wordt gebruikt voor de Jenkins-taak, aangepaste berichten, aangepaste botpictogrammen en meer:

Bij het instellen van dingen via de gebruikersinterface kunnen we de Test verbinding om ervoor te zorgen dat Jenkins Slack kan bereiken. Als dit lukt, zien we een testbericht in het Slack-kanaal van de Jenkins-gebruiker:

Als het bericht niet verschijnt, zijn de Jenkins-logboekbestanden handig voor het oplossen van problemen. Over het algemeen moeten we controleer nogmaals of de actie na het bouwen alle vereiste velden bevat, dat het OAuth-token correct is gekopieerd en dat het token het juiste bereik heeft gekregen toen we Slack configureerden.

5. Een Jenkins-pijplijn configureren

Jenkins Pipelines verschillen van traditionele banen. Ze gebruiken een enkel Groovy-script, onderverdeeld in fasen, om een ​​build te definiëren. Ze hebben ook geen post-build acties, dus we gebruiken het pipeline-script zelf om Slack-berichten te verzenden.

Het volgende fragment stuurt een bericht naar Slack vanuit een Jenkins-pijplijn:

slackSend botUser: true, kanaal: 'builds', kleur: '# 00ff00', bericht: 'Jekins testen met Slack', tokenCredentialId: 'slack-token'

Net als bij de traditionele Jenkins-taakconfiguratie, moeten we nog steeds een kanaalnaam en de naam van de te gebruiken referentie specificeren.

Via een Jenkins-pijplijn kunnen we ook een aantal extra Slack-functies gebruiken, zoals het uploaden van bestanden, berichtenthreads en meer.

Een nadeel van het gebruik van Jenkins-pijplijnen is dat er geen testknop is. Om de integratie met Slack te testen, moeten we de hele pijplijn uitvoeren.

Wanneer we dingen voor het eerst opzetten, kunnen we een nieuwe pijplijn maken die alleen de Slack-opdracht bevat terwijl we dingen aan het werk krijgen.

6. Aanvullende overwegingen

Nu we Jenkins en Slack hebben aangesloten, zijn er enkele aanvullende overwegingen.

Ten eerste, een enkele Jenkins-instantie kan communiceren met meerdere Slack-werkruimten. Het enige wat we hoeven te doen is een applicatie op maat maken en voor elke werkruimte een nieuw token genereren. Zolang elk token is opgeslagen als zijn eigen referentie in Jenkins, kunnen verschillende taken op verschillende werkruimten worden geplaatst.

Langs dezelfde lijnen, een andere Jenkins-job kan op verschillende Slack-kanalen posten. Dit is een instelling per taak in het post-build acties we configureren. Banen met betrekking tot software-builds kunnen bijvoorbeeld op een kanaal voor alleen ontwikkeling worden geplaatst. En taken die verband houden met test of productie kunnen naar hun eigen speciale kanalen gaan.

Tot slot, terwijl we hebben gekeken naar een van de meer populaire Slack-plug-ins voor Jenkins, die fijnmazige controle biedt over wat er moet worden verzonden, zijn er een aantal andere plug-ins die verschillende doeleinden dienen. Bijvoorbeeld als we willen elke Jenkins-taak om dezelfde melding te verzenden, is er een Globale Slack Notifier plug-in die hier misschien beter geschikt voor is.

7. Conclusie

In dit artikel hebben we gezien hoe we Jenkins en Slack kunnen integreren om feedback te krijgen over onze CI / CD-pijplijnen.

Met behulp van een Jenkins-plug-in, samen met een aangepaste Slack-applicatie, konden we berichten van Jenkins naar Slack verzenden. Hierdoor kunnen teams de status van Jenkins-taken zien en problemen sneller oplossen.