Jenkins Slack Integration

1. Oversigt

Når vores teams er ansvarlige for DevOps-praksis, er vi ofte nødt til at overvåge builds og andre automatiserede job.

I denne vejledning ser vi, hvordan vi konfigurerer to populære platforme, Jenkins og Slack, til at arbejde sammen og fortælle os, hvad der sker, mens vores CI / CD-rørledninger kører.

2. Opsætning af Slack

Lad os starte med at konfigurere Slack, så Jenkins kan sende beskeder til det. At gøre dette, vi opretter en brugerdefineret Slack-app, som kræver en administratorkonto.

I Slack opretter vi en applikation og genererer et OAuth-token:

  • Besøg //api.slack.com
  • Log ind på det ønskede arbejdsområde
  • Klik på Begynd at bygge knap
  • Navngiv ansøgningen Jenkins og klik Opret app
  • Klik på OAuth & Tilladelser
  • I Bot-tokenomfang sektion, tilføj chat: skriv rækkevidde
  • Klik på Installer app til arbejdsområde knap
  • Klik på Acceptere knap

Når dette er gjort, ser vi en oversigtsskærm:

Nu skal vi tage OAuth-token til efterretning - vi har brug for det senere, når vi konfigurerer Jenkins. Vi bør behandle disse som følsomme legitimationsoplysninger og hold dem i sikkerhed ..

For at afslutte Slack-opsætningen skal vi invitere den nye Jenkins-bruger til de kanaler, vi ønsker, den skal bruge. En nem måde at gøre dette på er at nævne den nye bruger med @ karakter inde i hver kanal.

3. Opsætning af Jenkins

For at oprette Jenkins, vi har brug for en administratorkonto.

Lad os først starte med at logge ind på Jenkins og navigere til Administrer Jenkins >Plugin Manager.

Derefter på Ledig fanen, vi søger efter Slap:

Lad os markere afkrydsningsfeltet for Slap meddelelse og klik Installer uden genstart.

Nu skal vi konfigurere nye legitimationsoplysninger. Lad os navigere til Jenkins> Legitimationsoplysninger> System> Globale legitimationsoplysninger og tilføj en ny Hemmelig tekst legitimationsoplysninger:

Vi sætter OAuth-token fra Slack i Hemmelighed Mark. Vi skal også give disse legitimationsoplysninger et meningsfuldt id og en beskrivelse, der hjælper os med let at identificere dem senere. Jenkins-legitimationsbutikken er et sikkert sted at beholde dette token.

Når vi gemmer legitimationsoplysningerne, er der en yderligere global konfiguration, der skal indstilles. Under Jenkins> Administrer Jenkins> Konfigurer system, skal vi kontrollere Brugerdefineret slap app bot-bruger afkrydsningsfelt under Slap afsnit:

Nu hvor vi har afsluttet Jenkins-opsætningen, lad os se på, hvordan man konfigurerer Jenkins-job og rørledninger til at sende Slack-meddelelser.

4. Konfiguration af et traditionelt Jenkins-job

Traditionelle Jenkins-job udfører normalt en eller flere handlinger for at nå deres mål. Disse konfigureres via Jenkins-brugergrænsefladen.

For at integrere et traditionelt job med Slack, vi bruger en post-build-handling.

Lad os vælge ethvert job eller oprette et nyt. Når vi falder ned Tilføj handling efter byggeriet menu finder vi Slakke meddelelser:

Når det er valgt, er der mange tilgængelige input til handlingen Slack Notification. Generelt er de fleste standardværdier tilstrækkelige. Der er dog et par nødvendige oplysninger:

  • Hvilke byggefaser der skal sendes beskeder til (start, succes, fiasko osv.)
  • Navnet på de legitimationsoplysninger, der skal bruges - dem, vi tidligere har tilføjet
  • Slack-kanalnavnet eller medlems-id, som meddelelser skal sendes til

Vi kan også specificere yderligere felter, hvis det ønskes, såsom forpligtelsesinformation, der bruges til Jenkins-jobbet, brugerdefinerede meddelelser, brugerdefinerede bot-ikoner og mere:

Når vi konfigurerer ting via brugergrænsefladen, kan vi bruge Test forbindelse knap for at sikre, at Jenkins kan nå Slack. Hvis det lykkes, ser vi en testmeddelelse i Slack-kanalen fra Jenkins-brugeren:

Hvis meddelelsen ikke vises, er Jenkins-logfiler nyttige til fejlfinding. Generelt skal vi dobbelttjek, at post-build-handlingen har alle nødvendige felter, at OAuth-tokenet blev kopieret korrekt, og at tokenet blev tildelt de rette omfang, da vi konfigurerede Slack.

5. Konfiguration af en Jenkins-rørledning

Jenkins-rørledninger adskiller sig fra traditionelle job. De bruger et enkelt Groovy-script opdelt i faser for at definere en build. De har heller ikke post-build-handlinger, så vi bruger selve pipeline-scriptet til at sende Slack-meddelelser.

Følgende uddrag sender en besked til Slack fra en Jenkins-pipeline:

slackSend botUser: true, channel: 'builds', farve: '# 00ff00', meddelelse: 'Test Jekins with Slack', tokenCredentialId: 'slack-token'

Ligesom med den traditionelle Jenkins-jobopsætning skal vi stadig angive et kanalnavn og navnet på den legitimationsoplysninger, der skal bruges.

Via en Jenkins-pipeline kan vi også bruge en række ekstra Slack-funktioner, såsom filupload, meddelelsestråde og mere.

En ulempe ved at bruge Jenkins-rørledninger er, at der ikke er nogen testknap. For at teste integrationen med Slack er vi nødt til at udføre hele pipelinen.

Når vi først konfigurerer tingene, kan vi oprette en ny pipeline, der kun indeholder Slack-kommandoen, mens vi får tingene til at fungere.

6. Yderligere overvejelser

Nu hvor vi har Jenkins og Slack forbundet, er der nogle yderligere overvejelser.

For det første, en enkelt Jenkins-instans kan kommunikere med flere Slack-arbejdsområder. Alt, hvad vi skal gøre er at oprette en brugerdefineret applikation og generere et nyt token til hvert arbejdsområde. Så længe hvert token er gemt som sin egen legitimationsoplysninger i Jenkins, kan forskellige job sende til forskellige arbejdsområder.

I samme retning, et andet Jenkins-job kan sende til forskellige Slack-kanaler. Dette er en indstilling pr. Job i handlinger efter byggeriet konfigurerer vi. For eksempel kan job, der er relateret til softwarebygninger, blive sendt til en kanal, der kun er til udvikling. Og job relateret til test eller produktion kan gå til deres egne dedikerede kanaler.

Endelig, mens vi har kigget på et af de mere populære Slack-plugins til Jenkins, som giver finkornet kontrol over, hvad der skal sendes, er der en række andre plugins, der tjener forskellige formål. For eksempel, hvis vi vil hver Jenkins job med at sende den samme besked, der er en Global Slack Notifier plugin, der måske er bedre egnet til dette.

7. Konklusion

I denne artikel har vi set, hvordan man integrerer Jenkins og Slack for at få feedback på vores CI / CD-rørledninger.

Ved hjælp af et Jenkins-plugin sammen med en brugerdefineret Slack-applikation kunne vi sende meddelelser fra Jenkins til Slack. Dette gør det muligt for hold at bemærke status for Jenkins-job og løse problemer hurtigere.