Multibranch Pipeline in Jenkins erstellen

Datum

Was ist das?

Bei einer Multibranch Pipeline erzeugt Jenkins aus jedem Branch eines git-Repos, mithilfe des beiliegenden Jenkinsfiles, einen separaten Job.

Dadurch kann man z.B. das Staging eines Build-Jobs in entsprechende Branches des Projektes integrieren. Jeder Branch kann dann z.B. ein anderes Script und/oder Tätigkeiten ausführen.

Zu beachten gibt es hier vor allem, dass die einzelnen Jobs nach dem erzeugen aus den Branches auch einmal automatisch ausgeführt werden.
Deshalb sollte man darauf achten, dass beim bauen des Jobs ohne das angeben von Parametern nichts ausgeführt wird.

Git-Repo und Jenkinsfile

Wie bereits erwähnt sind die Grundvorraussetzungen für eine Multibranch Pipeline ein Git-Repo mit Branches und Jenkinsfile.

Hier verwenden in meinem Beispiel eine recht einfache Variante.
Das Git(hub)-Repo hat zwei Branches mit Namen production und stage_1.
Standardmäßig hat das Projekt beim einchecken ins git den Branch master bekommen. Diesen verwende ich persönlich nur um eine entsprechende README für das Projekt zu pflegen, da man das dann nicht mehr in jedem Branch einzeln machen muss. Den master Branch filtere ich beim Einrichten der Multibranch Pipeline heraus.

Jeder Branch enthält ein Shellscript (testscript.sh), welches einen String ausgibt und das Jenkinsfile, welches den Job baut um das Shellscript auszuführen.

testscript.sh (Branch: stage_1)

#!/bin/bash
echo "Branch: Stage_1"

testscript.sh (Branch: production)

#!/bin/bash
echo "Branch: production"

Jenkinsfile

pipeline {
  agent any
  parameters {
    booleanParam(name: 'do_deployment', defaultValue: false, description: 'Aktivieren um Deployment durchzuführen')
  }
  stages {
    stage('stage 1') {
      when { expression { return params.do_deployment } }
      steps {
        sh "/bin/bash testscript.sh"
      }
    }
  }
}

Wie man hier sieht habe ich eine Bedingung eingebaut, welche den Job erst baut wenn der boolsche Parameter do_deployment, welcher standardmäßig auf false steht, auf true gesetzt wird.

Anlegen einer neuen Multibranch Pipeline

Hierzu legt man im Jenkins ein neues Element an, vergibt einen entsprechenden Namen und markiert als Element-Typ Multibranch Pipeline an bevor man auf OK klickt.

In der Konfiguration des neuen Projektes fügt man unter dem Punkt Branch Sources ein neues Git Element hinzu und fügt bei Project Repository die URL des entsprechenden Git(hub/lab)-Repos ein.
Weiter oben erwähnte ich bereits etwas zum master Branch und dessen persönliche Verwendung meinerseits.
Da dieser bei mir kein Jenkinsfile und somit keinen ausführbaren Job enthält, filtere ich diesen per Wildcard Filter heraus.

Nun kann man noch weitere Einstellungen vornehmen, z.B. was mit gelöschten Branches geschehen soll, wie oft bzw. ob überhaupt auf Veränderungen in den Branches geschaut werden soll, etc…

Aber im Grunde kann man nun auf Speichern bzw. Save klicken und Jenkins sollte das Git-Repo automatisch auschecken und beginnen daraus die entsprechenden Jobs zu bauen und auszuführen.

und die Jobs können regulär ausgeführt werden, sei es manuell, remote oder zeitlich gesteuert.

Autor
Kategorien Jenkins, Automatisierung

PRTG Map