Ich habe eine Jenkins-Pipeline erstellt und zieht das Pipeline-Skript aus scm.
Ich habe den Branch-Spezifizierer auf 'all
' gesetzt, damit er auf jeder Änderung an einem Zweig aufbaut.
Wie kann ich aus der Jenkins-Datei auf den Zweignamen zugreifen, der diesen Build verursacht?
Alles, was ich ausprobiert habe, ist null
sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
was immer master
ist.
Wenn Sie eine Jenkins-Datei für Ihre Pipeline haben, prüfen Sie, ob Sie zur Ausführungszeit Ihren Zweignamen in Ihren Umgebungsvariablen sehen.
Sie können sie ausdrucken mit:
pipeline {
agent any
environment {
DISABLE_AUTH = 'true'
DB_ENGINE = 'sqlite'
}
stages {
stage('Build') {
steps {
sh 'printenv'
}
}
}
}
PR 91 zeigt jedoch, dass der Zweigname nur in bestimmten Pipeline-Konfigurationen festgelegt ist:
Verwenden Sie eine Multibank-Pipeline. Keine Pipeline
In meinem Skript ..
stage('Build') {
node {
echo 'Pulling...' + env.BRANCH_NAME
checkout scm
}
}
Erträge ...
Pulling...master
Ein Kollege bat mich, scm.branches[0].name
zu verwenden, und es funktionierte. Ich habe es in meiner Jenkinsfile in eine Funktion verpackt:
def getGitBranchName() {
return scm.branches[0].name
}
Durch den Wechsel zu einer Multibranchen-Pipeline konnte ich auf den Filialnamen zugreifen. Eine reguläre Pipeline wurde nicht empfohlen.
Für mich funktionierte dies: (mit Jenkins 2.150, mit einfachem Pipeline-Typ - nicht mit mehreren Niederlassungen, meinem Branchenspezifizierer: 'Origin/Branches **')
echo 'Pulling... ' + env.GIT_BRANCH
Ausgabe:
Pulling... Origin/myBranch
dabei ist myBranch der Name des Funktionszweigs
Das Abrufen des Namens von scm.branches
reicht nicht aus, wenn Sie einen Build-Parameter als Verzweigungsspezifizierer verwendet haben, z. ${BRANCH}
. Sie müssen diese Zeichenfolge in einen echten Namen erweitern:
scm.branches.first().getExpandedName(env.getEnvironment())
Beachten Sie, dass getEnvironment()
ein expliziter Getter sein muss, ansonsten env
sucht nach einer Umgebungsvariablen namens environment .
Vergessen Sie nicht, dass Sie diese Methoden genehmigen müssen, um sie über die Sandbox zugänglich zu machen.