Schritt für Schritt zum richtigen Prozess

Implementieren des Workflow Plug-ins in Jenkins

Dan Juengst

© Shutterstock / Andrio

Wie richtet man einen Workflow in einer Continuous-Delivery-Umgebung ein? Dies ist eine Frage mit vielen Facetten. Es hängt davon ab, ob ein einfacher Workflow erzeugt werden soll – ein Arbeitsfluss von einem Task zum anderen – oder ein komplexerer Satz von voneinander abhängigen Prozessen. In jedem Fall kann Workflow, das neue Continuous Delivery Plug-in von Jenkins, für das Management von Pipelines zum Einsatz kommen.

Der Unterschied ist wie folgt: ein Workflow, als Konzept, kann eine einfache Aufgabe sein. Wenn Sie einen Prozess einrichten wollen, der entlang einer logischen Sequenz verläuft – von einem Build-Stack zu einem anderen und wieder zu einem anderen und dann in die Produktion –, können Sie dies mit einem Skript erreichen. Es ist wie das Schreiben eines Theaterstückes, in dem eine Szene auf die andere folgt. Oder wie der Arbeitsablauf an einer einfachen Produktionslinie, mit Programmierung der Arbeitsschritte und Automatisierung der Funktionen. Ein Workflow kann in einem herkömmlichen Jenkins-Continuous-Delivery-Job erzeugt werden.

Workflows für komplexere Abläufe

Doch was tun, wenn die Job-Pipeline komplizierter ist? Wenn sie eine Reihe von Schleifen enthält und regelmäßige Prüfungen erfordert, um sicherzustellen, dass bestimmte Prozesse durchlaufen werden? Wenn die Prüfungen in verschiedenen Abständen erfolgen oder mehrere Jobs parallel ausgeführt werden sollen? Sie könnten ein System mit mehreren Plug-ins bauen, die bestimmte Tasks erledigen, und versuchen, diese so miteinander zu verknüpfen, dass der Arbeitsfluss automatisch abläuft. Oder Sie könnten einen Workflow mit einem Jenkins-Workflow-Plug-in erzeugen.

Das Plug-in Workflow erlaubt die Durchführung komplexer mehrstufiger Builds auf der Basis eines Programmskripts. Die Jenkins Community hat die Workflow-Ressource erstellt, um Teams bei der Kombination von Jobs zu unterstützen, sodass sie komplexere Aktivitäten orchestrieren können. Es handelt sich um eine Lösung, um Aktivitäten zu orchestrieren, die sich über mehrere Build-Slaves und Code-Repositorys erstrecken können. Auf diese Weise können Pfade zur Produktion entstehen, wie sie in Jenkins bisher nicht existierten.

Dies bringt uns zurück zu einer abgeänderten Formulierung der ursprünglichen Frage: Wie erzeugt man einen Workflow in Workflow? Wenn Sie Workflow und Ressourcen wie die Plug-ins Git und JUnit – auf dem neuesten Stand – installiert haben, können Sie Workflows mit wenigen einfachen Schritten erzeugen.

Erzeugen eines Workflows

Und so fangen Sie damit an: Klicken Sie im Jenkins Tool auf „New Item“, geben Sie Ihrem Flow einen Namen, wählen Sie Workflow und klicken Sie auf „OK“. Sie gelangen daraufhin zum Konfigurationsmenü für den Flow. Geben Sie im Skript-Bereich ein einfaches Skript wie „Hallo von Workflow“ ein. Sichern Sie Ihren fertigen Workflow und klicken Sie auf „Build Now“, um ihn auszuführen. Fertig! So erstellen Sie ein Groovy-Skript, das Jenkins anweist, was zu tun ist, wenn Ihr Flow ausgeführt wird.

Erzeugen eines einfachen Flows

Zu Anfang müssen Sie sicherstellen, dass eine Apache-Maven-Installation verfügbar ist, mit der Builds erstellt werden können. Klicken Sie auf Ihren Flow und bearbeiten Sie sein Skript mit „Configure“. Wenn Sie das Skript ausführen, werden Tests durchgeführt. Wenn diese fehlschlagen, wird der Flow beendet. Weitere Details zur Ausführung des Maven-Builds und zur Verwaltung der Umgebung sind im Workflow-Plug-in-Tutorial verfügbar.

Aufzeichnen der Testergebnisse und Artefakte

Anstatt den Ausfall des Builds zu melden, wenn einige Tests fehlschlagen, kann Jenkins diese aufzeichnen und die Ausführung fortsetzen. Es kann auch die jar-Datei erfassen. Das Java-Archiv lässt sich besser herunterladen. Wenn die Tests fehlschlagen, wird der Flow als instabil gekennzeichnet und Sie können sich im „Test Result Trend“ die Historie ansehen.

Slaves verwenden

Bisher wurde Ihr Workflow nur auf dem Jenkins Master ausgeführt. Und es wurde angenommen, dass keine Slaves konfiguriert wurden. Um einen einfachen Slave zu erzeugen, wählen Sie „Manage Jenkins / Manage Nodes / New Node“ und erzeugen Sie einen Dumb Slave. Wenn Sie auf „Build Now“ klicken, sehen Sie den Link und die M3-Maven-Installation wird in diesem Slave-Rootverzeichnis entpackt.

Phasen

Builds können standardmäßig gleichzeitig ausgeführt werden. Mit dem Befehl Stage können bestimmte Teile eines Builds als mit eingeschränkter Gleichzeitigkeit gekennzeichnet werden. Neuere Builds werden immer vorrangig behandelt, wenn eine solche gedrosselte Phase gestartet wird; ältere Builds werden einfach beendet, wenn sie unterbrochen werden. Es wird jeweils nur ein Build ausgeführt, und zwar der neueste, der alle vorherigen Phasen durchlaufen hat. Jeder SCM-Push kann dennoch einen separaten Build einer schnelleren Phase für Kompilierungs- und Einheitentests auslösen. Trotzdem wird jeder Build linear ausgeführt und kann auch einen einfachen Arbeitsbereich behalten, sodass es nicht erforderlich ist, Artefakte zwischen Builds zu lokalisieren und zu kopieren.

Erkunden der nächsten Schritte

Zur Kontrolle weiterer Schritte und ihrer Syntax können Sie ein Hilfe-Tool nutzen, das in das Flow-Definitionsmenü integriert ist. Durch Anklicken von „Snippet Generator“ unterhalb des Textskript-Bereichs wird eine Liste der installierten Schritte generiert. Anschließend können Sie durch Anklicken von „Generate Groovy“ einen Groovy-Codeschnipsel darstellen, der den Schritt exakt so ausführt, wie Sie ihn konfiguriert haben. Hiermit können Sie den Namen der für den Schritt verwendeten Funktion und die Namen aller dabei verwendeten Parameter zusammen mit ihrer Syntax darstellen.

Ausfallsicherer Mechanismus

Das Erstellen eines Workflows im Workflow-Tool bietet den Vorteil, dass Ihre Arbeit nicht verloren gehen kann. Wenn Sie in einem traditionellen Jenkins Job einen sehr lang laufenden Build-Prozess ausführen, müssen Sie den Rechner, auf dem der mit Jenkins verbundene Build erstellt wird, ununterbrochen so lange laufen lassen, wie der Job dauert. Dies kann Stunden oder Tage dauern. Im Falle einer Systemstörung müssen Sie möglicherweise den gesamten Build aufgeben und neu anfangen, auch wenn der Prozess schon 35 von 40 Stunden gelaufen ist. Dies ist offensichtlich nicht gut für die Produktivität.

Solange der der Rechner eingeschaltet ist und läuft, kann Jenkins innerhalb von Workflow mehrmals neu gestartet werden, ohne dass Arbeit verloren geht. Die Verbindung zur Build-Maschine kann zeitweilig getrennt und neu gebootet werden. Der Prozess wird genau dort fortgesetzt, wo er unterbrochen wurde.

Aufmacherbild: Abstract network of interconnected nodes von Shutterstock / Urheberrecht: Andrio

Verwandte Themen:

Geschrieben von
Dan Juengst
Dan Juengst
Dan Juengst ist Senior Director of Products bei CloudBees, wo er die Markteinführungs-Strategie von CloudBees Continuous-Delivery-Plattform leitet. Er hat über 20 Jahre Erfahrung in Grid Computing, High Performance Computing und Applikationsperformance. Er hat verschiedene Senior-Technical-Positionen bei Red Hat, Sun Microsystems. SGI, Wily Technology und Terracotta.
Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: