web-dev-qa-db-ger.com

Git Environment-Variablen Jenkins können nicht mit Groovy Jenkinsfile gelesen werden

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. 

6
NateW

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}"
}
10
Konrad Kleine

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.

5
Breedly

Dies ist in Git plugin 3.3.1 behoben

Version 3.3.1 (23. Juni 2017)

  • Erste Zeile der Commit-Nachricht im Konsolenprotokoll drucken (JENKINS-38241)
  • Erlaube scm-Schritten, die Version zurückzugeben ( JENKINS-26100 )
  • Krümel für POST an/git/notifyCommit nicht benötigen, auch wenn CSRF aktiviert ist (JENKINS-34350)
  • Fehler bei der Verwendung von Pipelinebibliotheken für die Verfolgung von Nullzeiger bei der Verwendung von Pipelinebibliotheken behoben (JENKINS-44640)
  • Korrigieren der Berechtigungsnachweise für die NULL-Zeigerausnahme bei Verwendung von Git-Parametern (JENKINS-44087)

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.

1
Noah Bar-Shain

Möglicherweise müssen Sie so etwas tun.

node {
   def branch = env.BRANCH_NAME
   sh "My branch name: ${branch}"
}
1
Oscar Romero