Декларативный конвейер Jenkins: запуск блока script {} за пределами этапов

Цель:

Мне нужно запустить фрагмент, подобный этому, чтобы получить некоторую информацию из другой работы Дженкинса:

 script {
    def buildJobName = Jenkins.instance.getItemByFullName('Jobs/myOtherJob')
    def buildJobId = buildJobName.getLastSuccessfulBuild()
 }

Документация ясно объясняет, как скрипт может быть запущен в декларативном конвейере: https://jenkins.io/doc/book/pipeline/syntax/#script, но явно запускает их в несколько этапов.

Эта область вопроса конкретно о том, как запустить «любой» блок скрипта за пределами этапов конвейера, поэтому не конкретно, что делает мой скрипт. Может применяться к любому оригинальному сценарию в декларативном конвейере.


Моему сценарию использования понадобятся эти данные глобально, вне рамок одного шага

Обычно для «глобальных» вещей по всему конвейеру я использую блок environment{} для объявления переменных. Однако я не могу заставить скрипт работать должным образом в блоке environment{} , по крайней мере, с попытками, которые я сделал.

Итак, мой вопрос:

Как я могу запустить секцию скрипта в декларативном конвейере, определяя переменные, которые впоследствии могут быть использованы во всем конвейере?

Всего 1 ответ


Понял это после того, как сделал еще некоторое исследование.

Возможно, есть более оптимальный путь, но я смог добиться этого, поместив скрипт в функцию и установив значение env var в возвращаемое значение функции:

def get_last_build() {
  def buildJobName = Jenkins.instance.getItemByFullName('Jobs/myOtherJob')
  def lastBuildId = buildJobName.getLastSuccessfulBuild()
  echo 'Using Build ID: ' + lastBuildId
  return lastBuildId
}

pipeline {
  agent any
  environment {
    MY_GLOBAL_VAR = get_last_build()
  }
  // other stuff
} 

Есть идеи?

10000