Das Git Plugin ist (standardmäßig) in meinen Jenkins installiert, aber ich kann die Env-Variablen nicht abrufen, die vom Git Plugin übergeben werden sollen. Ich suche:
GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL
usw. Ich verwende das Pipeline-Jobelement, das auf ein Github-Repo mit der Jenkinsfile mit dem folgenden Code verweist
stage 'PushToProd'
node {
git url: "https://github.com/username/fakeurl.git"
echo "Starting PushToProd"
sh 'printenv'
sh 'env'
sh 'echo $BRANCH_NAME'
sh 'echo $GIT_COMMIT'
}
Ich bekomme viele Umgebungsvariablen, wenn ich env
oder printenv
verwende, nur nicht die Github-Plugin-Variablen.
Gibt es Tipps, wie ich die Git-Umgebungsvariablen an den Job übergeben kann?
Update : Ich kann die Git-env-Variablen leicht abrufen, wenn ich ein Freestyle-Projekt verwende und einen Shell-Schritt echo $GIT_COMMIT
verwende. Ich möchte jedoch immer noch wissen, wie es mit Jenkinsfile + Pipeline-Jobobjekt zum Laufen gebracht wird.
Dies funktioniert nicht, da keine doppelten Anführungszeichen, fehlende geschweifte Klammern und env.
fehlen:
sh 'echo $BRANCH_NAME'
Dies funktioniert wie erwartet in einem Jenkinsfile:
node {
sh "echo ${env.BRANCH_NAME}"
}
Alle anderen, die über dieses Stackoverflow-Problem gestolpert sind, sollten sich dessen bewusst sein, dass dies ein bug mit der aktuellen Pipeline-Situation ist.
Viele Diskussionen hier: https://issues.jenkins-ci.org/browse/JENKINS-35230
Grundsätzlich kann das Plugin aufgrund von Inkompatibilitäten mit der Pipeline keine Umgebungsvariablen korrekt hinzufügen.
Dies ist in Git plugin 3.3.1 behoben
Version 3.3.1 (23. Juni 2017)
Bei den meisten Pipeline-Beispielen, die ich gefunden habe, wird der Code in einen "Node" -Verschluss eingeschlossen, wodurch das Jenkins Git-Plugin aus irgendeinem Grund die Umgebungsvariablen nicht füllen kann.
Wenn Sie es jedoch stattdessen so umbrechen, werden die Umgebungsvariablen ordnungsgemäß festgelegt:
pipeline {
agent {
label ('<AGENT>')
}
stages {
stage('<STAGE>') {
steps {
<CODE>
}
}
}
}
Ich bin nicht sicher, welche Verschlüsse hier ausschlaggebend sind, aber durch diese Formatierung konnte ich auf Env-Variablen wie env.GIT_COMMIT
zugreifen.
Möglicherweise müssen Sie so etwas tun.
node {
def branch = env.BRANCH_NAME
sh "My branch name: ${branch}"
}