Git Переменные в плагине рабочего процесса Jenkins
Мне бы хотелось получить доступ к переменным git, таким как GIT_COMMIT и GIT_BRANCH, когда я проверил репозиторий из git дальше в потоке сборки. В настоящее время я не вижу доступной переменной для доступа к этим двум параметрам.
node {
git git+ssh://git.com/myproject.git
echo "$GIT_COMMIT - $BRANCH_NAME"
}
Доступны ли такие переменные, и в случае, где я их найду. Я не возражаю, если они доступны через некоторые переменные groovy или где угодно, просто чтобы я мог получить к ним доступ.
Возможно, мне не хватает навыков отладки в groovy, и это легко найти, но я просто не могу найти его с моими ограниченными навыками.
Ответы
Ответ 1
Хорошим способом исправить это пока является использование многоотводного конвейера, и было бы хорошо знать, что у Bitbucket и Github есть плагины в Jenkins, которые настраивают организацию и автоматически обнаруживают новые проекты. Это работает изначально с помощью env.GIT_BRANCH
Для идентификатора commit я бы предложил, что написал @mkobit выше.
Ответ 2
В зависимости от используемого плагина SCM, шаг checkout
может возвращать дополнительную информацию о ревизии. Это было разрешено в JENKINS-26100. Он был выпущен в версии 2.6 плагина workflow-scm-step
.
Например, используя плагин Git, вы можете сделать что-то вроде:
final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}
Это зависит от используемого вами плагина, поэтому исходный ответ может работать лучше для вас.
Оригинальный ответ
С выпуском версии "Плагины конвейеров и процессов" вы можете просто:
def gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
Ответ 3
Это то, что я делаю, основываясь на примере, представленном в репозитории примеров Jenkins:
node {
git url: 'https://git.com/myproject.git'
sh 'git rev-parse --abbrev-ref HEAD > GIT_BRANCH'
git_branch = readFile('GIT_BRANCH').trim()
echo git_branch
sh 'git rev-parse HEAD > GIT_COMMIT'
git_commit = readFile('GIT_COMMIT').trim()
echo git_commit
}
Ответ 4
Этот пример может помочь вам:
https://github.com/jenkinsci/pipeline-examples/tree/master/pipeline-examples/gitcommit
В этом примере они передают вывод команд git в файл, а затем читают файл.
Ответ 5
Вы можете определить свои задания (извлечение git info from last commit) внутри node
для выполнения в очереди.
node {
//Code checkout from SCM (here - `git`)
checkout scm
stage("GIT INFO"){
echo ":::::::::::GIT_SHORT_COMMIT::::::::::::::::::::::::"
GIT_SHORT_COMMIT = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
//echo in jenkins console
echo GIT_SHORT_COMMIT
//wanted to send these info to build artifacts, append to any file
sh("echo ${GIT_SHORT_COMMIT} > GIT_SHORT_COMMIT")
//Similar proceed for other git info
echo ":::::::::::GIT_COMMITTER_EMAIL::::::::::::::::::::::::"
GIT_COMMITTER_EMAIL = sh(returnStdout: true, script: "git show -s --pretty=%ae").trim()
sh("echo ${GIT_COMMITTER_EMAIL} > GIT_COMMITTER_EMAIL-${GIT_COMMITTER_EMAIL}")
echo ":::::::::::GIT_COMMITTER_NAME::::::::::::::::::::::::"
GIT_COMMITTER_NAME = sh(returnStdout: true, script: "git show -s --pretty=%an").trim()
sh("echo ${GIT_COMMITTER_NAME} > GIT_COMMITTER_NAME-${GIT_COMMITTER_NAME}")
}
После завершения вашей работы в рабочей области вы увидите три дополнительных файла из вышеприведенной задачи:
.
|-- [email protected]
|-- GIT_COMMITTER_NAME-username
|-- GIT_SHORT_COMMIT_<commit-short-ID-ef9e91c>
Ответ 6
В зависимости от требуемой информации существует очень простое решение: вернуть операцию "checkout scm": она предоставляет GIT_BRANCH, GIT_COMMIT, GIT_PREVIOUS_COMMIT, GIT_PREVIOUS_SUCCESSFUL_COMMIT и GIT_URL.
node {
stage ("Checkout") {
scmInfo = checkout scm
/*...*/
echo "scm : ${scmInfo}"
echo "${scmInfo.GIT_COMMIT}"
}
}
Это выведет:
...
[Pipeline] echo
scm : [GIT_BRANCH:my-branch, GIT_COMMIT:0123456789abcdefabcdef0123456789abcdef01, GIT_PREVIOUS_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_PREVIOUS_SUCCESSFUL_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_URL:http://my.si.te/my-repository.git]
[Pipeline] echo
0123456789abcdefabcdef0123456789abcdef01
...
Подробнее здесь Шаги SCM Jenkins Pipeline