Получить имя ветки git в Jenkins Pipeline/Jenkinsfile

Я создаю трубопровод дженкинсов, и он тянет трубопровод script от scm.
Я задал спецификатор ветки "all", поэтому он основывается на любом изменении любой ветки.

Как мне получить доступ к имени ветки, вызывающему эту сборку, из файла Jenkins?

Все, что я пробовал эхо вне null, кроме

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

который всегда master.

Ответ 1

Если у вас есть файл jenkins для вашего конвейера, проверьте, не отображается ли во время выполнения ваше имя ветки в переменных среды.

Вы можете распечатать их с помощью:

pipeline {
    agent any

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

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

Однако PR 91 показывает, что имя ветки задается только в определенных конфигурациях конвейера:

Ответ 2

Использовать многоканальный трубопровод.. не трубопровод

В моем script..

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

    }
}

Урожайность...

Pulling...master

Ответ 3

Коллега сказал мне использовать scm.branches[0].name, и это сработало. Я завернул его в функцию в моем файле Jenkins:

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

Ответ 4

Переход на многоканальный конвейер позволил мне получить доступ к имени ветки. Не рекомендуется использовать обычный трубопровод.

Ответ 5

Для меня это сработало: (используя Jenkins 2.150, используя простой тип конвейера - не многоотраслевой, мой спецификатор ветки: '**')

echo 'Pulling... ' + env.GIT_BRANCH

Выход:

Pulling... origin/myBranch

где myBranch - это имя ветки функции

Ответ 6

Просто получить имя из scm.branches недостаточно, если вы использовали параметр build в качестве спецификатора ветки, например ${BRANCH}. Вам нужно развернуть эту строку в настоящее имя:

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

Обратите внимание: getEnvironment() должен быть явным getter, иначе env будет искать переменную среды, называемую средой.

Не забывайте, что вам нужно одобрить эти методы, чтобы сделать их доступными из песочницы.