Login
Newsletter
Werbung

Do, 15. Dezember 2016, 15:00

Automatisierung mit Jenkins 2.0

Eine Pipeline schreiben

Bislang wurde rein die Theorie der Pipeline behandelt. Spannender wird es, wenn eine Pipeline geschrieben wird. Voraussetzung ist eigentlich nur, dass ein Jenkins-Server mit dem Pipeline-Plug-in installiert ist. Anschließend muss über das Hauptmenü Element anlegen eine Pipeline ausgewählt werden, die dann einen passenden Pipeline-Job anlegt. Für den Anfang ist es immer besser, die Pipeline innerhalb eines Jobs zu definieren, statt sie direkt in ein Repository zu legen, da sonst sehr häufig bei Änderungen für Kleinigkeiten eingecheckt werden muss.

Das folgende Beispiel zeigt eine ganz einfache Pipeline, die nicht viel mehr macht als die Ausgabe von »Hello World!«:

node {
  echo 'Hello World!'
}

Dieses zugegeben einfache Beispiel führt auf einem beliebigen Node zur Ausgabe von »Hello World!«. Man kann node auch noch einen Parameter übergeben, welcher den Namen des Nodes darstellt, auf dem der Code ausgeführt werden soll. Das sieht etwa so aus:

node("ubuntu1604") {
  echo 'Hello World from Ubuntu!'
}

Damit das auch ausgeführt wird, muss allerdings ein Node mit dem Namen oder Label ubuntu1604 existieren. Ansonsten wartet die Pipeline ewig, bis ein solcher Node verfügbar ist.

Der Snippet-Generator ermöglicht die Generierung von Groovy-Code

Sujeevan Vijayakumaran

Der Snippet-Generator ermöglicht die Generierung von Groovy-Code

An dieser Stelle wäre es zwar möglich, die komplette Pipeline-Syntax herunterzuschreiben, allerdings wäre das wohl etwas viel. Eine wichtige Quelle, um die richtige Syntax zu lernen und alle Funktionen zu finden, ist der »Snippet Generator«. Dieser ist in jedem Pipeline-Job zu finden, wenn man im Hauptmenü auf Pipeline Syntax klickt.

Dort findet sich ein Drop-Down-Menü, in dem verschiedene Build-Schritte und Aktionen über diverse Formulare zusammengeklickt werden können. Dies ist sehr oft sehr hilfreich, weil man auch nach längeren Arbeiten mit der Pipeline-Syntax sich diese nicht so einfach einprägen kann. Das liegt auch daran, dass viele Plug-ins ihre eigenen Befehle und Parameter mitbringen, die man sich fast unmöglich merken kann. Ansonsten gilt, dass der Code in Groovy geschrieben wird und dessen Sprachelemente ebenfalls genutzt werden können.

Interessant werden Pipelines, wenn mehrere Stages existieren, welche die Ausführung der Pipeline sinnvoll gruppieren:

node {
  stage('Checkout') {
    checkout scm
  }

  stage('Build') {
    sh '''cmake .
      make -j2'''
  }

  stage('Tests') {
    sh './run_tests'
  }
}

Ansicht der Stages der Pipeline

Sujeevan Vijayakumaran

Ansicht der Stages der Pipeline

Durch die Umsetzung der Jobs in Pipelines wurden viele Nachteile aus Jenkins 1.x ausgebessert. Einige Features sind allerdings noch nicht – oder nur anders – mit Pipelines möglich. So lassen sich aktuell etwa keine Stages innerhalb von Stages schachteln. Es existiert auch keine direkte Möglichkeit, um Multikonfigurationsprojekte umzusetzen. Letzteres sind Jobs, die mit verschiedenen Konfigurationen ausgeführt werden, also etwa Tests einer Software mit verschiedenen Einstellungen. Dies ist etwa dann notwendig, wenn man die Software über verschiedene Linux-Distributionen oder gar Betriebssysteme hinweg testet und trotzdem noch übersichtlich sehen will, ob ein bestimmtes System noch Probleme hat.

Je nachdem wie intensiv man Jenkins nutzt, kann es also durchaus sein, dass sich noch nicht alle bisherigen Jobs in Pipelines umsetzen lassen. Da muss man wohl noch auf einige weitere Features und Verbesserungen warten. Pipelines bilden trotzdem die wesentliche Grundlage für die zukünftige Nutzung von Jenkins. Sie sind nicht unbedingt einfach zu schreiben, lassen sich aber durch die Nutzung des Snippet-Generators trotzdem mit vielen kleinen Schritten schreiben. Pipelines sind auch wesentlicher Bestandteil der nächsten drei Funktionen, die vorgestellt werden.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung