Электронный текст 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
Беги. Надеюсь это поможет.