#jenkins #groovy #jenkins-pipeline #jenkins-groovy
Вопрос:
У меня есть следующая ситуация в файле Дженкинса с заданием А:
...
... // Some execution
...
call Job B
// When Job B runs successfully
params.some_var_used_in_Job_C = BUILD ID of Job B
call Job C
Я должен знать идентификатор СБОРКИ задания B после его успешного выполнения, и мне нужно передать его в качестве параметров для задания C. Может ли кто-нибудь подсказать, как я могу это сделать?
Также возможно ли, что я могу передать некоторую переменную из задания B в задание A (чтобы позже я мог отправить это значение в задание C) ?
Комментарии:
1. как ты называешь «Работу Б»? с помощью параметризованного плагина удаленного запуска или программно?
2. @KausUntwale программно с помощью функции build().
Ответ №1:
Должно быть так просто, как это:
node {
stage('Test') { // for display purposes
def jb = build wait: true, job: 'JobB'
println jb.fullDisplayName
println jb.id
//this will show everything available but needs admin privs to execute
println jb.properties
}
}
Если вы хотите передать простую строку из задания B в задание A, то в задании B вы можете установить переменную env
env.someVar = "some value"
затем возвращаюсь к работе А
println jb.buildVariables.someVar
Ответ №2:
@Kaus раскручивает ответ правильно. Я скопировал его ответ в декларативный конвейер и добавил обработку ошибок.
С работы в восходящем потоке:
pipeline {
agent any
stages {
stage('Run job') {
steps {
// make build as unstable on error
// remove this if not needed
catchError(buildResult: 'UNSTABLE') {
script {
def jb = build wait: true, job: 'test2', propagate: false
println jb
println jb.fullDisplayName
println jb.id
// throw an error if build failed
// this still allows you to get the job infos you need
if (jb.result == 'FAILURE') {
error('Downstream job failed')
}
}
}
}
}
}
}
Получите сборку в рамках последующего задания:
# job: test2
pipeline {
agent any
stages {
stage('Upstream') {
steps {
script {
// upstream build if available
def upstream = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)
echo upstream?.shortDescription
// the run of that cause holds more infos
def upstreamRun = upstream?.getUpstreamRun()
echo upstreamRun?.number.toString()
}
}
}
}
}
Смотрите документы api для класса run. Вам также потребуется разрешить некоторые вызовы из нижестоящего примера в качестве одобренных сценариев или отключить в этом задании песочницу Groovy.
Комментарии:
1. Я думаю, что ОП просит работу ниже по течению, а не выше по течению.