#jenkins #continuous-integration #jenkins-pipeline #multibranch-pipeline
#Дженкинс #непрерывная интеграция #jenkins-конвейер #многоотраслевой конвейер
Вопрос:
Я использую многоотраслевой конвейер в Jenkins, и мне нужно динамически задавать имя каталога пользовательского рабочего пространства на основе имени создаваемой ветви. Когда я определяю пользовательское рабочее пространство для конвейера, я пытаюсь получить доступ к переменной среды, которая содержит имя ветки следующим образом:
pipeline {
agent {
node {
label 'master'
customWorkspace 'some/path/${BRANCH_NAME}'
Однако во git init
время работы с рабочим пространством интерполяция строк не выполняется. Вместо того, чтобы вставлять в строку любое имя ветви, оно пытается установить имя рабочего пространства как '${BRANCH_NAME}'
без интерполяции переменной имени ветви. Если я интерполирую переменную за пределами agent
блока (например, если я интерполирую переменную в stage
блоке), интерполяция строк выполняется отлично, и я могу получить имя ветки от Дженкинса.
Что может быть причиной этой проблемы? Существуют ли какие-либо другие способы настройки пользовательского рабочего пространства на основе имени ветви в многоотраслевом конвейере?
Спасибо!
Ответ №1:
Интерполяция строк работает с двойными кавычками, но не работает с одинарными кавычками. Когда я меняю синтаксис на следующий, он работает:
pipeline {
agent {
node {
label 'master'
customWorkspace "some/path/${BRANCH_NAME}"
Обратите внимание на двойные кавычки, используемые вокруг customWorkspace
определения.
По-видимому, Groovy не может выполнить интерполяцию строк для строк, заключенных в одинарные кавычки. Однако по какой-то причине интерполяция строк в строках, заключенных в одинарные кавычки, работает вне agent
блока (например, в stage
блоке), но отказывается работать в примере выше.
Комментарии:
1. Интерполяция строк не работает со строками с одинарными кавычками (ни в коем случае). Это предполагаемое поведение, как вы можете видеть в документации здесь: groovy-lang.org/syntax.html#_string_interpolation