66 votes

Obtenir le nom de la branche git dans Jenkins Pipeline/Jenkinsfile

J'ai créé un pipeline jenkins et il tire le pipeline script de scm.
J'ai mis le spécificateur de branche à ' all ', de sorte qu'il se construit sur n'importe quelle modification de n'importe quelle branche.

Comment accéder au nom de la branche à l'origine de cette construction depuis le fichier Jenkins ?

Tout ce que j'ai essayé est sans écho, sauf

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

qui est toujours master .

61voto

James Points 446

Utilisez pipeline multibranche le type d'emploi, et non le simple pipeline type d'emploi. Les travaux de pipeline multibranches possèdent la variable d'environnement env.BRANCH_NAME qui décrit la branche.

Dans mon script

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

    }
}

Les rendements...

Pulling...master

8 votes

Il s'agit en fait du nom du travail, et non de la branche git. Cela fonctionne tant que vos travaux ont le même nom que vos branches.

0 votes

Et toutes ces variables sont également définies sur la page du plugin Git, ici, sous Variables d'environnement : plugins.jenkins.io/git

1 votes

Cela fonctionne parfaitement tant que ce qui est mentionné ^^ ci-dessus est respecté.

32voto

VonC Points 414372

Si vous avez un jenkinsfile pour votre pipeline, vérifiez si vous voyez au moment de l'exécution votre nom de branche dans votre 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 montre que le nom de la branche n'est défini que dans certaines configurations de pipeline :

3 votes

Merci, c'était utile. Il semble que ce ne soit pas dans mes variables d'environnement. Est-il possible d'exposer la branche qui a causé la construction ?

3 votes

Il est ridicule qu'un fichier dans le repo (le Jenkinsfile) soit censé fournir un nom de branche codé en dur. Cela fait du repo lui-même un désastre à gérer. Cela doit être corrigé...

27voto

Attila123 Points 184

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

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

1 votes

J'ai essayé cela et j'ai obtenu... ...org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException : scripts non autorisés à utiliser la méthode BRANCH_NAME ne fonctionne pas et env.BRANCH_NAME renvoie null...

4 votes

Si vous définissez la bibliothèque partagée comme globale, vous n'aurez pas de problèmes de sécurité. L'autre moyen est d'autoriser ces exceptions de sécurité sur le fichier Manage Jenkins > In Process Script Approval

0 votes

Vous pouvez également mettre cette méthode sur une liste blanche

12voto

alex Points 18

Pour moi, cela a fonctionné : (avec Jenkins 2.150, en utilisant un type de Pipeline simple - pas de multi-branches, mon spécificateur de branche : '**')

echo 'Pulling... ' + env.GIT_BRANCH

Sortie :

Pulling... origin/myBranch

où maBranche est le nom de la branche de la caractéristique.

0 votes

Cela ne fonctionne pas, le résultat est nul. Cette réponse n'est utilisable que si vous spécifiez plus que votre numéro de version, par exemple, utilisez-vous des plug-ins qui font la magie pour vous ?

0 votes

@chrillelundmark J'ai édité ma réponse après avoir réessayé... Je n'ai pas installé de plugin pour m'aider dans ce but, sinon je ne sais pas ce que je devrais préciser... Je suppose qu'il n'y a pas assez de caractères dans un commentaire pour écrire tous mes plugins

5voto

Alex Yurkowski Points 675

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

0 votes

Oui, la lecture github.com/jenkinsci/pipeline-model-definition-plugin/pull/91 vous devriez le voir dans BRANCH_NAME .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X