© Excellent backgrounds/Shutterstock.com
Das Pipeline-Plug-in von Jenkins

So baue ich eine Build-Pipeline


Aktuelle Trends wie Agile Entwicklung mit ihren kurzen Iterationen und Microservices wecken den Bedarf, die Softwarebereitstellung zu automatisieren. Dadurch wird Continuous Deliv­ery [1] zum Wettbewerbsvorteil. Doch wie baue ich eigentlich eine Build-Pipeline? Dazu bietet der Build-Server Jenkins mit seinem „Pipeline as Code“-Ansatz solide Bausteine.

Jenkins ist mittlerweile ein alter Hase auf dem Markt der Build-/Continuous-Integration-Server. Mit dem Pipeline-Plug-in [2] bietet es solide Bausteine für eine eigene Build-Pipeline. Die Pipeline wird dabei in einer Groovy Domain-Specific Language (DSL) formuliert. Dies bietet die Flexibilität einer Programmiersprache gepaart mit sinnvollen Abstraktionen. Darüber hinaus bietet sich die Möglichkeit, die Pipeline genauso wie den Programmcode zu versionieren. Ein weiterer Vorteil ist, dass die Ausführung der Pipeline nach einem Absturz des Build-Servers an genau dieser Stelle wieder aufgenommen wird.

getrost_jenkinspipeline_1.tif_fmt1.jpgAbb. 1: Eine typische Build-Pipeline besteht aus fünf Stufen

Im Rahmen dieses Artikels erstellen wir eine Build-Pipeline, wie sie in Abbildung 1 zu sehen ist. Als Software kommt die kitchensink-Anwendung aus den WildFly Quickstarts zum Einsatz [3]. Unsere Pipeline besteht aus den folgenden Stages:

  • Commit Stage: Check-out der Software aus der Versionsverwaltung und Build des Webarchivs mit Maven.

  • Automatische Akzeptanzteststage: In dieser Stage unserer Pipeline wird das zuvor gebaute Webarchiv mit Arquillian auf einen WildFly-Server deployt und die automatischen Integrationstests ausgeführt.

  • User-Experience-(UX-)Tests und Securitytests: Nachdem unsere Software erfolgreich gebaut wurde und die Akzeptanztests grün sind, folgen parallel manuelle UX- und Securitytests. Diese werden auf unterschiedlichen Testsystemen und durch unterschiedliche Personen durchgeführt.

  • Release-Stage: Im letzten Schritt wird unsere Software für die produktive Verwendung bereitgestellt.

Der Anfang: Hello-World-Pipeline

Zunächst beginnen wir mit einer einfachen Hello-World-Pipeline zum Warmwerden. Dazu legen wir in Jenkins einen neuen Job vom Typ Pipeline an und geben diesem einen Namen. Für unsere erste Hello-World-Pipeline geben wir den Code (Listing 1) direkt im Abschnitt Pipeline unserer Konfiguration ein:

stage 'Commit Stage' node { echo "Hallo ${env.USERNAME}" }

Unsere Hello-World-Pipeline definiert zunächst eine Stage und gibt dieser einen Namen. In der nächsten Zeile beginnen wir mit node einen Block, der auf einem Jenkins-Build-Slave ausgeführt wird. Die Auswahl der Build Slaves lässt sich durch Tags einschränken. Der Befehl echo schließlich gibt einen Begrüßungstext auf der Konsole aus. Dazu verwendet er eine Umgebungsvariable, um den Nutzernamen zu ermitteln. Umgebungsvariablen und Build Properties lassen sich innerhalb der Pipeline über Platzhalter in Strings einfügen. Dabei bekommen Umgebungsvariablen ein env vorangestellt. Nach dem Speichern unserer ersten Pipeline führen wir diese über Build now aus. Danach sollten wir ein Ergebnis wie in Abbildung 2 sehen.

getrost_jenkinspipeline_2.tif_fmt1.jpgAbb. 2: Nach dem Ausführen der Pipeline wird die Stage View angezeigt

Snippet Generator

Das Jenkins-Pipeline-Plug-in bietet auf der Konfigurationsseite ein nützliches Tool, um sich Code Snippets für Pipelinefunktionen zu generieren (Abb. 3). Vor allem am Anfang ist dies sehr hilfreich, da man hier eine Liste aller verfügbaren Funktionen inklusive Dokumentation erhält.

getrost_jenkinspipeline_3.tif_fmt1.jpgAbb. 3: Mit Snippet Generator lassen sich praktische Code Snippets für Build-Pipelines erstellen

Stufe 1: Die Commit Stage

Nachdem unser Build-Job aufgesetzt und das Grundgerüst unserer Pipeline erstellt ist, füllen wir unsere Pipeline mit Leben und setzen die Schritte der Commit Stage um. Dazu implementieren wir die folgenden Tasks:

  • Check-out des Projekts aus der Versionsverwaltung Git

  • Build des Webarchivs mit Maven

  • Speichern des Webarchivs im Build-Job

Für den Check-out von Sourcecode stellt uns das Jenkins-Pipeline-Plug-in die Funktion svn für Subversion und die Funktion git für Git zur Verfügung. Der Check-out unseres Beispielprojekts sieht mit Git dann folgendermaßen aus:

git url: 'https://github.com/wildfly/quickstart.git'

Bevor wir mit Maven...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang