Как получить идентификатор сборки задания, запущенного из другого задания

#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. Я думаю, что ОП просит работу ниже по течению, а не выше по течению.