Verwendung von Jenkins Shared Libraries

Beginner

Einführung

Jenkins Shared Libraries ermöglichen es Teams, Pipeline-Code über viele Jobs hinweg wiederzuverwenden. Ein gängiges Bibliothekslayout platziert einfache benutzerdefinierte Schritte im Verzeichnis vars/. Eine Pipeline kann die Bibliothek anschließend laden und diese Schritte wie normale Pipeline-Funktionen aufrufen.

In diesem Lab bereiten Sie eine lokale Shared Library mit vars/sayHello.groovy vor, registrieren diese als Global Pipeline Library im Jenkins-Dashboard, erstellen einen Pipeline-Job, der sayHello aufruft, und überprüfen die Ausgabe in Jenkins.

Vorbereiten eines Shared Library Repository

In diesem Schritt bereiten Sie ein lokales Git-Repository für eine Jenkins Shared Library vor. Das Verzeichnis vars/ ist besonders: Jede darin enthaltene .groovy-Datei wird zu einem Pipeline-Schritt mit demselben Namen.

Führen Sie diesen Befehl aus, um vars/sayHello.groovy innerhalb des Jenkins-Containers zu erstellen:

docker exec jenkins bash -lc '
set -e
rm -rf /var/jenkins_home/shared-lib-src /var/jenkins_home/shared-lib.git
mkdir -p /var/jenkins_home/shared-lib-src/vars
cd /var/jenkins_home/shared-lib-src
git init -b main
git config user.email "jenkins@example.com"
git config user.name "Jenkins Shared Library"
cat > vars/sayHello.groovy <<'"'"'EOF'"'"'
def call(String name = "LabEx") {
    echo "Shared library says hello to ${name}"
}
EOF
git add vars/sayHello.groovy
git commit -m "Add sayHello shared library step"
'

Veröffentlichen Sie nun das Repository als lokales Bare-Git-Repository und stellen Sie es über git://localhost/shared-lib.git bereit:

docker exec jenkins bash -lc '
set -e
cd /var/jenkins_home/shared-lib-src
git init --bare --initial-branch=main /var/jenkins_home/shared-lib.git
git remote add origin /var/jenkins_home/shared-lib.git
git push origin main
touch /var/jenkins_home/shared-lib.git/git-daemon-export-ok
if [ -f /tmp/shared-lib-git-daemon.pid ]; then
  kill "$(cat /tmp/shared-lib-git-daemon.pid)" 2>/dev/null || true
  rm -f /tmp/shared-lib-git-daemon.pid
fi
git daemon --reuseaddr --base-path=/var/jenkins_home --export-all --detach --pid-file=/tmp/shared-lib-git-daemon.pid /var/jenkins_home
'

Notieren Sie den Repository-Branch, den Jenkins verwenden wird:

docker exec jenkins git ls-remote git://localhost/shared-lib.git refs/heads/main | tee /home/labex/project/shared-library-repository.txt

Die Ausgabe sollte refs/heads/main enthalten.

Registrieren einer Global Pipeline Library

In diesem Schritt registrieren Sie das Repository als Jenkins Global Pipeline Library mit dem Namen labex-shared-lib. Eine Pipeline kann diesen Namen mit @Library laden.

Öffnen Sie die Desktop-Oberfläche. Firefox öffnet Jenkins automatisch. Falls nicht, rufen Sie http://localhost:8080 auf.

Vom Jenkins-Dashboard aus:

Klicken Sie auf Manage Jenkins und dann auf System.

Scrollen Sie zu Global Trusted Pipeline Libraries oder Global Pipeline Libraries. Klicken Sie auf Add.

Füllen Sie die Bibliothek mit diesen Werten aus:

  • Name: labex-shared-lib
  • Default version: main
  • Aktivieren Sie Allow default version to be overridden
  • Lassen Sie Load implicitly deaktiviert
  • Retrieval method: Modern SCM
  • Source Code Management: Git
  • Project Repository: git://localhost/shared-lib.git
  • Credentials: - none -

Klicken Sie auf Save.

Jenkins Global Pipeline Library Konfiguration

Führen Sie diesen Befehl aus, um die gespeicherte Bibliothekskonfiguration zu protokollieren:

docker exec jenkins sh -lc "grep -n -E '<name>labex-shared-lib</name>|git://localhost/shared-lib.git|<defaultVersion>main</defaultVersion>' /var/jenkins_home/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml" | tee /home/labex/project/shared-library-config-lines.txt

Erstellen einer Pipeline, die die Bibliothek lädt

In diesem Schritt erstellen Sie einen Pipeline-Job namens shared-library-demo. Die Pipeline lädt labex-shared-lib und ruft den benutzerdefinierten Schritt sayHello('LabEx') aus vars/sayHello.groovy auf.

Vom Jenkins-Dashboard aus:

Klicken Sie auf New Item, geben Sie shared-library-demo ein, wählen Sie Pipeline und klicken Sie auf OK.

Scrollen Sie zum Abschnitt Pipeline. Behalten Sie bei Definition die Einstellung Pipeline script bei.

Geben Sie dieses Skript ein:

@Library('labex-shared-lib@main') _

node {
    stage('Use Library') {
        sayHello('LabEx')
    }
}

Klicken Sie auf Save.

Jenkins Pipeline mit einer Shared Library

Führen Sie diesen Befehl aus, um das gespeicherte Pipeline-Skript zu protokollieren:

docker exec jenkins sh -lc "grep -n -E '@Library|sayHello' /var/jenkins_home/jobs/shared-library-demo/config.xml" | tee /home/labex/project/shared-library-job-config.txt

Ausführen der Shared Library Pipeline

In diesem Schritt führen Sie den Pipeline-Job aus. Jenkins ruft die Shared Library aus dem lokalen Git-Repository ab, lädt vars/sayHello.groovy und führt den benutzerdefinierten Schritt aus.

Klicken Sie auf der Job-Seite shared-library-demo auf Build Now.

Wenn Build #1 im Build-Verlauf erscheint, warten Sie, bis er abgeschlossen ist. Ein erfolgreicher Build bedeutet, dass Jenkins die Bibliothek geladen und das Pipeline-Skript ausgeführt hat.

Jenkins Shared Library Build-Ergebnis

Führen Sie diesen Befehl aus, um das Build-Ergebnis zu speichern:

curl -fsS http://localhost:8080/job/shared-library-demo/1/api/json | tr ',' '\n' | grep '"result":"SUCCESS"' | tee /home/labex/project/shared-library-build-result.txt

Überprüfen der Shared Library Ausgabe

In diesem Schritt überprüfen Sie die Jenkins-Konsolenausgabe. Der entscheidende Nachweis ist die Zeile, die von sayHello.groovy ausgegeben wird.

Öffnen Sie Build #1 und klicken Sie dann auf Console Output.

Die Konsole sollte zeigen, wie Jenkins labex-shared-lib lädt und Folgendes ausgibt:

Shared library says hello to LabEx

Jenkins Shared Library Konsolenausgabe

Führen Sie diesen Befehl aus, um denselben Konsolennachweis zu speichern:

curl -fsS http://localhost:8080/job/shared-library-demo/1/consoleText | grep 'Shared library says hello to LabEx' | tee /home/labex/project/shared-library-console-lines.txt

Zusammenfassung

Sie haben ein Jenkins Shared Library Repository vorbereitet, es als Global Pipeline Library über das Dashboard registriert, einen Pipeline-Job erstellt, der die Bibliothek lädt, und überprüft, dass ein benutzerdefinierter vars/-Schritt erfolgreich in der Jenkins-Konsolenausgabe ausgeführt wurde.