Электронный текст Jenkins Pipeline: как получить доступ к объекту сборки в сценарии предварительной отправки

Я использую Дженкинс вер. 2.150.1 и иметь несколько работ вольным стилем и некоторые работы на конвейере. В обоих типах заданий я использую плагин emailext с шаблоном и сценариями предварительной отправки.

Кажется, что переменная build, которая доступна в проектах freestyle, является нулевой в конвейерных проектах.

Сценарий предварительной отправки выглядит следующим образом (просто пример, мой сценарий более сложный):

msg.setSubject(msg.getSubject() + " [" + build.getUrl() + "]")

Нет проблем с переменной msg. В работе по фристайлу этот скрипт добавляет сборочный URL к теме письма. В конвейерном задании в консоли задания указано следующее:

java.lang.NullPointerException: Cannot invoke method getUrl() on null object

Вызов emailext в конвейерном задании:

emailext body: '${SCRIPT, template="groovy-html.custom.pipeline.sandbox.template"}', 
         presendScript: '${SCRIPT, template="presend.sandbox.groovy"}', 
         subject: '$DEFAULT_SUBJECT', 
         to: 'user@domain.com'

Я предпочел бы найти общее решение этой проблемы (т.е. доступ к переменной сборки в сценарии предварительной отправки конвейера), но также был бы признателен за любые обходные пути для моих текущих потребностей:доступ к именизадания, номеру задания и папке рабочей области в конвейере предварительно. посылать скрипт

0 ответов

Я наконец нашел ответ -

По-видимому, для сценария presend в заданиях конвейера build объект не существует, и вместо этого runобъект делает. На тот момент, когда я разместил этот вопрос, он еще не был задокументирован!

Нашел ответ в этой теме

Что заставило автора обновить описание в вики:

  • run - сборка, к которой относится это сообщение (может использоваться с заданиями FreeStyle или Pipeline)
  • build - сборка, к которой принадлежит это сообщение (используется только с заданиями FreeStyle)

Вы можете получить доступ к build в сценарии, как это:

// findUrl.groovy

def call(script) {
   println script.currentBuild.rawBuild.url
   // or if you just need the build url
   println script.env.BUILD_URL
}

и вызовет скрипт из конвейера следующим образом:

stage('Get build URL') {
    steps {
        findUrl this
    }
}

currentBuild дает вам объект RunWrapper и rawBuild Беги. Надеюсь это поможет.

Другие вопросы по тегам