web-dev-qa-db-fra.com

Impossible de lire les variables d'environnement Git Jenkins avec Groovy Jenkinsfile

Le plugin Git est installé (par défaut) dans mon Jenkins mais je ne parviens pas à obtenir les variables env qui sont supposées être transmises par le plugin Git. Je cherche:

GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT 
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL

etc. J'utilise l'élément de travail de pipeline qui pointe vers un dépôt Github avec le fichier Jenkins avec le code suivant

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'
}

Je reçois beaucoup de variables d'environnement lorsque j'utilise env ou printenv mais pas celles du plugin Github.
Avez-vous des conseils pour obtenir les variables Git env?

Update : Je peux facilement obtenir les variables d'environnement Git lorsque j'utilise un projet Freestyle et que l'étape Shell utilise echo $GIT_COMMIT. Vous souhaitez toujours savoir comment le faire fonctionner à l'aide de l'élément de travail Jenkinsfile + Pipeline.

6
NateW

Cela ne fonctionnera pas à cause du manque de guillemets, de l'accolade manquante et de env.:

sh 'echo $BRANCH_NAME' 

Cela fonctionne comme prévu dans un fichier Jenkins:

node {
    sh "echo ${env.BRANCH_NAME}"
}
10
Konrad Kleine

Ainsi, quiconque est tombé par hasard sur ce problème de Stackoverflow devrait savoir qu'il s'agit d'un bug avec la situation actuelle du pipeline.

Beaucoup de discussions ici: https://issues.jenkins-ci.org/browse/JENKINS-35230

Essentiellement, le plug-in n'est pas en mesure d'ajouter correctement des variables d'environnement en raison de certaines incompatibilités avec le pipeline.

5
Breedly

Ceci est corrigé dans Git plugin 3.3.1

Version 3.3.1 (23 juin 2017)

  • Imprimer la première ligne du message de validation dans le journal de la console (JENKINS-38241)
  • Autorise les étapes scm à renvoyer la révision ( JENKINS-26100 )
  • Ne nécessite pas de miettes pour POST à/git/notifyCommit même lorsque CSRF est activé (JENKINS-34350)
  • Correction des exceptions de suivi du pointeur null dans l'utilisation de la bibliothèque de pipeline (JENKINS-44640)
  • Correction des exceptions de suivi du pointeur null dans l'utilisation des paramètres git (JENKINS-44087)
3

La plupart des exemples de pipeline que j'ai trouvés englobent le code dans une fermeture de "noeud", ce qui, pour une raison quelconque, ne permet pas au plug-in Jenkins Git de renseigner les variables d'environnement.

Cependant, si vous le placez comme ceci, les variables d’environnement sont définies correctement:

pipeline {
  agent {
    label ('<AGENT>')
  }
  stages {
    stage('<STAGE>') {
      steps {
        <CODE>
      }
    }
  }
}

Je ne sais pas quelles fermetures sont cruciales ici, mais cette mise en forme m'a permis d'accéder à des variables env telles que env.GIT_COMMIT

1
Noah Bar-Shain

Vous devrez peut-être faire quelque chose comme ça.

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