web-dev-qa-db-fra.com

Le nom de la branche de pipeline Jenkins renvoie la valeur null

J'essaie d'obtenir le nom de ma branche pour un script jenkins groovy. Je ne peux pas obtenir le nom actuel de la succursale. J'essaie ce qui suit:

stage('Check out code')
checkout scm
echo "My branch is: ${env.BRANCH_NAME}"

Voici la sortie - elle renvoie toujours null. 

 Checking out Revision 33b531b2f1caaf8b64d968e437306f39d2dba1da   (Origin/pipeline)
  > git.exe config core.sparsecheckout # timeout=10
  > git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
 [Pipeline] echo
 My branch is: null

Est-ce que je manque quelque chose?

10
pogorman

Cette variable ne fonctionne que dans une pipline multibranches:

NOM DE LA FILIALE Pour un projet multibranches, il sera défini sur le nom de la branche en cours de construction, par exemple si vous souhaitez effectuer un déploiement en production à partir du maître mais pas à partir des branches de fonctions.

Je testais dans une pipline normale

24
pogorman

Ma solution de contournement, je ne sais pas si travailler pour quelqu'un d'autre ..

def branchName = getCurrentBranch()
echo 'My branch is' + branchName

def getCurrentBranch () {
    return sh (
        script: 'git rev-parse --abbrev-ref HEAD',
        returnStdout: true
    ).trim()
}
5
b.ben
git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da

Cela ferait entrer le git repo dans un mode détaché HEAD , qui, de par sa nature même, n’a pas de branche.

De Jenkinsfile :

L'étape de paiement va extraire le code du contrôle de source; scm est une variable spéciale qui indique à l'étape de paiement de cloner la révision spécifique ayant déclenché l'exécution de ce pipeline.

Donc, le ${env.BRANCH_NAME} est nul.

Comme indiqué dans " Jenkins Workflow Checkout En accédant à BRANCH_NAME et GIT_COMMIT ", vous pouvez obtenir le SHA1 que vous venez d'extraire avec la syntaxe groovy (à adapter dans un DSL de pipeline Jenkins):

sh 'git rev-parse HEAD > commit'
def commit = readFile('commit').trim()
4
VonC

J'ai eu le même problème, mais je l'ai résolu en changeant 

println "${env.BRANCH_NAME}"

à

println "${BRANCH_NAME}"

Notez que mon plugin vérifie également en mode détaché:

git checkout -f e10a170e17fb5f9282f903a7b3cd17bd2e181dee
0
sdc