Интерполяция строк переменной среды Jenkins для настройки пользовательского рабочего пространства

#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