Получить имя ветки 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
будет искать переменную среды, называемую средой.
Не забывайте, что вам нужно одобрить эти методы, чтобы сделать их доступными из песочницы.