Blog

Jenkins Pipelines: met 1 klik code bouwen, testen en deployen

Heb je eindelijk die nieuwe oplevering gemaakt, kom je er later achter dat er een spelfout staat op de voorpagina van je app... Dit betekent dus je code aanpassen, testen, een release maken en vervolgens beheerders lastigvallen met de vraag of ze tijd hebben om de release op de juiste omgeving te zetten. Dit zou toch makkelijker moeten kunnen? En dat kan zeker, lees hier hoe.

De voordelen van Jenkins Pipelines

Jenkins Pipelines is een nuttige uitbreiding op Jenkins. Dit is een veelgebruikte tool om allerlei standaardprocessen te automatiseren zodat je leven als IT’er een stuk makkelijker en minder repetitief wordt. Het probleem met Jenkins is het aantal processen, jobs genoemd, dat je opbouwt gedurende de tijd. Iedere actie zoals builden, testen, kwaliteitschecks, releasen en deployen heeft zijn eigen job, waardoor het totale aantal jobs snel onoverzichtelijk wordt.

Jenkins Pipelines zorgt ervoor dat je herhalende acties generiek op kan zetten, zodat je deze als losse bouwblokken tot 1 pipeline kan maken.
Het grote voordeel hiervan is dat je je configuratie niet verliest wanneer je job (of de hele server) verwijderd is.

De ruggengraat van Pipelines is de Jenkinsfile. Dit is het bestand waarin je je pipeline configureert en dat je naast je code in versiebeheer zet. Ter illustratie zal ik hieronder een klein voorbeeldje geven.

Wat heb je nodig voor Jenkins Pipelines

Voor een complete pipeline hebben we de volgende plugins nodig:

  • Pipelines: noodzakelijk voor de pipeline functionaliteit.
  • Groovy: de taal waarin je je pipeline schrijft.
  • Blue Ocean: voor een heldere, grafische weergave van je pipeline.
  • Nexus: om je artifacts op te slaan.
  • SonarQube / Owasp Dependency Checker: checkt de kwaliteit van je code en je externe frameworks.

Na installatie van de plugins kan je een Jenkinsfile aanmaken in de root van je project.
Een voorbeeld van een standaard Jenkinsfile zie je hieronder:

pipeline {       
          //1
          agent any       
          //2
          tools    {              
                     maven       ‘maven-3.6.0’
                     jdk            ‘JDK9’       
          }       
          stages   {              
                      //3
                      stage (‘Build’)  {
                      //4
                      steps  {                           
                                sh ‘mvn clean install’                   
                      } 
                }       
          }
}


//1: De agent is de environment waar je de code wil uitvoeren. Dit kan bijvoorbeeld Docker of een specifieke node zijn.

//2: Automatische installatie van de genoemde tools op je PATH. Voorwaarde is wel dat deze onder Manage Jenkins / Tools staan.

//3: Iedere stage van je Pipeline vormt een los bouwblok dat samen een pipeline oplevert.

//4. In de steps specificeer je de plugins en commando’s die de handelingen verrichten die je uit wilt voeren.

Vervolgens kan je de plugins in je Jenkinsfile opnemen, alle beschikbare plugins en de bijbehorende opties zijn goed gedocumenteerd in de Pipeline Steps.
Voor een volledig ingestelde pipeline inclusief plugins, kun je een kijkje nemen op https://github.com/koosdrost/demo.
Na het configureren van alle onderdelen kan je je pipeline aftrappen en krijg je onderstaande te zien:

Tips & tricks voor Jenkins Pipelines

Ten opzichte van de ‘oude’ Jenkins heeft Pipelines nog een aantal handige toevoegingen:

  1. Handig om te weten is dat je in de Console van je job de Replay optie hebt. Deze optie houdt in dat je (zonder code te committen) kan spelen met verschillende configuraties van je voorgaande scripts.
  2. Ook is er tegenwoordig de optie User Input om de pipeline tijdens het uitvoeren te sturen. Op deze manier kan je bijvoorbeeld een waarschuwing tonen wanneer je naar Productie deployed:

timeout(time:5, unit:'DAYS') {

    input message:'Approve deployment?', submitter: 'it-ops'

}

  1. Zoals te zien in de ingestelde pipeline hierboven, is het mogelijk om ook Parallele stages uit te voeren. Erg handig wanneer je bijvoorbeeld cross-platform (Windows / Linux) moet testen en je de tijd van je job wilt inkorten.

Waarom Jenkins Pipelines?

Jenkins Pipelines geeft je een aantal voordelen ten opzichte van de traditionele Jenkins.
User Input, Replay en Parallele stages zijn allemaal toegevoegd met als doel het voorkomen van dubbel werk en hiermee het besparen van tijd.
Het configureren in je Jenkinsfile (pipeline-as-code) kan lastig zijn voor de minder technische teamleden, maar die afweging is aan jou om te maken.
Uiteindelijk zijn Pipelines de moeite waard om te proberen, voornamelijk in een complexe omgeving met een groot aantal jobs.

Wil jij eens verder sparren over Jenkins Pipelines? Neem dan contact met ons op!

Door Koos Drost – Java Consultant bij Conspect – 31 juli 2019