Jenkins Slack Integration

1. Oversikt

Når teamene våre er ansvarlige for DevOps-praksis, trenger vi ofte å overvåke bygg og andre automatiserte jobber.

I denne opplæringen vil vi se hvordan du konfigurerer to populære plattformer, Jenkins og Slack, til å jobbe sammen og fortelle oss hva som skjer mens CI / CD-rørledningene kjører.

2. Sette opp Slack

La oss starte med å konfigurere Slack slik at Jenkins kan sende meldinger til det. Å gjøre dette, Vi oppretter en tilpasset Slack-app som krever en administratorkonto.

I Slack oppretter vi en applikasjon og genererer et OAuth-token:

  • Besøk //api.slack.com
  • Logg på ønsket arbeidsområde
  • Klikk på Begynn å bygge knapp
  • Navngi søknaden Jenkins og klikk Opprett app
  • Klikk på OAuth & Permissions
  • I Bot Token Scopes delen, legg til chat: skriv omfang
  • Klikk på Installer appen på arbeidsområdet knapp
  • Klikk på Aksepterer knapp

Når dette er gjort, ser vi et sammendragsskjermbilde:

Nå må vi merke OAuth-tokenet - vi trenger det senere når vi konfigurerer Jenkins. Vi bør behandle disse som sensitive referanser og hold dem trygge ..

For å fullføre Slack-oppsettet, må vi invitere den nye Jenkins-brukeren til kanalene vi ønsker at den skal bruke. En enkel måte å gjøre dette på er å nevne den nye brukeren med @ karakter inne i hver kanal.

3. Sette opp Jenkins

For å sette opp Jenkins, vi trenger en administratorkonto.

Først, la oss begynne med å logge på Jenkins og navigere til Administrer Jenkins >Plugin Manager.

Så, på Tilgjengelig fanen, søker vi etter Slakk:

La oss merke av for Slakk varsel og klikk Installer uten omstart.

Nå må vi konfigurere ny legitimasjon. La oss navigere til Jenkins> Legitimasjonsinformasjon> System> Globale legitimasjon og legg til en ny Hemmelig tekst legitimasjon:

Vi legger OAuth-token fra Slack inn i Hemmelig felt. Vi bør også gi disse legitimasjonene en meningsfull ID og beskrivelse for å hjelpe oss med å identifisere dem senere. Jenkins legitimasjonsbutikk er et trygt sted å beholde dette tokenet.

Når vi lagrer legitimasjonen, er det en global konfigurasjon å sette. Under Jenkins> Administrer Jenkins> Konfigurer system, må vi sjekke Tilpasset slakk app bot-bruker avkrysningsruten under Slakk seksjon:

Nå som vi har fullført Jenkins-oppsettet, la oss se på hvordan du konfigurerer Jenkins-jobber og rørledninger for å sende Slack-meldinger.

4. Konfigurere en tradisjonell Jenkins-jobb

Tradisjonelle Jenkins-jobber utfører vanligvis en eller flere handlinger for å nå sine mål. Disse konfigureres via Jenkins brukergrensesnitt.

For å integrere en tradisjonell jobb med Slack, vi bruker en handling etter byggingen.

La oss velge hvilken som helst jobb, eller opprette en ny. Når vi slipper ned Legg til handling etter bygging menyen, finner vi Slakke varsler:

Når det er valgt, er det mange tilgjengelige innganger til Slack Notification-handlingen. Vanligvis er de fleste standardverdiene tilstrekkelige. Imidlertid er det noen få nødvendige opplysninger:

  • Hvilke byggefaser å sende meldinger for (start, suksess, feil osv.)
  • Navnet på legitimasjonen som skal brukes - de vi la til tidligere
  • Slakk kanalnavn eller medlems-ID å sende meldinger til

Vi kan også spesifisere flere felt hvis ønskelig, for eksempel forpliktelsesinformasjon som brukes til Jenkins-jobben, egendefinerte meldinger, egendefinerte botikoner og mer:

Når du setter opp ting via brukergrensesnittet, kan vi bruke Test tilkobling for å sikre at Jenkins kan nå Slack. Hvis det lykkes, ser vi en testmelding i Slack-kanalen fra Jenkins-brukeren:

Hvis meldingen ikke vises, er Jenkins-loggfilene nyttige for feilsøking. Generelt sett må vi dobbeltsjekk at handlingen etter bygging har alle nødvendige felt, at OAuth-token ble kopiert riktig, og at tokenet fikk de riktige omfangene da vi konfigurerte Slack.

5. Konfigurere en Jenkins-rørledning

Jenkins Pipelines skiller seg fra tradisjonelle jobber. De bruker et enkelt Groovy-skript, delt inn i trinn, for å definere en build. De har heller ikke handlinger etter bygging, så vi bruker selve pipeline-skriptet til å sende Slack-meldinger.

Følgende kodebit sender en melding til Slack fra en Jenkins-rørledning:

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

Akkurat som med det tradisjonelle Jenkins-jobboppsettet, må vi fremdeles spesifisere et kanalnavn og navnet på legitimasjonen som skal brukes.

Via en Jenkins-rørledning kan vi også bruke en rekke ekstra Slack-funksjoner, for eksempel filopplasting, meldingstråder og mer.

En ulempe med å bruke Jenkins-rørledninger er at det ikke er noen testknapp. For å teste integrasjonen med Slack, må vi utføre hele rørledningen.

Når vi først setter opp ting, kan vi lage en ny rørledning som bare inneholder Slack-kommandoen mens vi får ting til å fungere.

6. Ytterligere hensyn

Nå som vi har Jenkins og Slack tilkoblet, er det noen ekstra hensyn.

For det første, en enkelt Jenkins-forekomst kan kommunisere med flere Slack-arbeidsområder. Alt vi trenger å gjøre er å lage et tilpasset program og generere et nytt token for hvert arbeidsområde. Så lenge hvert token er lagret som sin egen legitimasjon i Jenkins, kan forskjellige jobber postes på forskjellige arbeidsområder.

På samme måte, en annen Jenkins-jobb kan legge ut på forskjellige Slack-kanaler. Dette er en innstilling per jobb i handlinger etter bygging konfigurerer vi. Jobber relatert til programvarebygging kan for eksempel legges inn på en kanal som bare er utviklet. Og jobber knyttet til test eller produksjon kan gå til sine egne dedikerte kanaler.

Til slutt, mens vi har sett på en av de mer populære Slack-pluginene for Jenkins, som gir finkornet kontroll over hva du skal sende, er det en rekke andre plugins som tjener forskjellige formål. For eksempel hvis vi vil hver Jenkins jobber med å sende samme varsel, det er en Global Slack Notifier plugin som kan være bedre egnet for dette.

7. Konklusjon

I denne artikkelen har vi sett hvordan vi kan integrere Jenkins og Slack for å få tilbakemelding på våre CI / CD-rørledninger.

Ved hjelp av et Jenkins-plugin, sammen med et tilpasset Slack-program, kunne vi sende meldinger fra Jenkins til Slack. Dette gjør at lagene kan legge merke til statusen til Jenkins-jobber og løse problemer raskere.