web-dev-qa-db-fra.com

Obtenez le nom de la branche git dans Jenkins Jenkinsfile

J'ai créé un pipeline jenkins qui extrait le script de pipeline de scm.
J'ai défini le spécificateur de branche sur 'all', de sorte qu'il s'appuie sur toute modification apportée à une branche. 

Comment puis-je accéder au nom de la branche à l'origine de cette construction à partir du fichier Jenkins? 

Tout ce que j'ai essayé fait écho à null sauf 

sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()

qui est toujours master.

27
Alex Yurkowski

Si vous avez un fichier jenkins pour votre pipeline, vérifiez si vous voyez au moment de l'exécution le nom de votre branche dans vos variables d'environnement .

Vous pouvez les imprimer avec:

pipeline {
    agent any

    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

Cependant, PR 91 indique que le nom de la branche n’est défini que dans certaines configurations de pipeline:

13
VonC

Utiliser un pipeline multibranch .. pas un pipeline

Dans mon script ..

stage('Build') {
    node {
        echo 'Pulling...' + env.BRANCH_NAME
        checkout scm

    }
}

Les rendements ...

Pulling...master
23
James

Un collègue m'a dit d'utiliser scm.branches[0].name et cela a fonctionné. Je l'ai encapsulé dans une fonction de mon fichier Jenkins:

def getGitBranchName() {
    return scm.branches[0].name
}
6
Attila123

Le passage à un pipeline multibranches m'a permis d'accéder au nom de la branche. Un pipeline régulier n'a pas été conseillé.

5
Alex Yurkowski

Pour moi, cela a fonctionné: (avec Jenkins 2.150, avec un type de pipeline simple - pas multibranch, mon spécificateur de branche: 'Origine/branches **')

echo 'Pulling... ' + env.GIT_BRANCH

Sortie:

Pulling... Origin/myBranch

où myBranch est le nom de la branche de fonctionnalité

0
alex

Obtenir le nom à partir de scm.branches ne suffit pas si vous avez utilisé un paramètre de construction comme spécificateur de branche, par exemple. ${BRANCH}. Vous devez développer cette chaîne en un vrai nom:

scm.branches.first().getExpandedName(env.getEnvironment())

Notez que getEnvironment() doit être un getter explicite, sinon env recherchera une variable d'environnement appelée environment .

N'oubliez pas que vous devez approuver ces méthodes pour les rendre accessibles à partir du bac à sable.

0
0neel