Переменные среды рабочего процесса Jenkins, вызывающие сбой

Для этого очень простого рабочего процесса:

env.FOO = 42
node {
  sh "echo $FOO"
}

Я получаю следующую ошибку:

Running: End of Workflow
groovy.lang.MissingPropertyException: No such property: FOO for class: WorkflowScript

Как получить доступ к переменным среды в шагах оболочки рабочего процесса?


person Michael Neale    schedule 01.12.2015    source источник


Ответы (2)


У меня была проблема, когда мне нужно было смешать интерполяцию. Где часть сценария интерполируется до, а часть сценария интерполируется во время. Трюк, чтобы избежать переменных, которые вы хотите интерполировать во время прогона, с помощью обратной косой черты:

def FOO = 42

node {
  sh """
    BAR = "hello $FOO"
    echo \$BAR
  """
}

Таким образом, $FOO раскрывается перед запуском сценария, а \$BAR расширяется во время выполнения сценария.

person Dennis Hoer    schedule 31.05.2017
comment
это отличный совет! - person Michael Neale; 20.06.2017
comment
Это связано с тем, что $FOO является допустимым Groovy и допустимой оболочкой. Либо вы хотите, чтобы Groovy расширил его с помощью "$FOO", либо вы экранируете его, чтобы передать его оболочке с помощью "\$FOO" или '$FOO'. - person bfontaine; 18.12.2019

Причина в том, что с двойными кавычками интерполяция строк Groovy срабатывает и ищет переменную области рабочего процесса FOO.

Чтобы исправить, используйте одинарные кавычки:

sh 'echo $FOO'

Обратите внимание, что вы также можете использовать переменные рабочего процесса в сценариях с двойными кавычками:

def FOO = 43

node {
  sh "echo $FOO"
}

Это расширит значение $FOO перед запуском скрипта.

person Michael Neale    schedule 01.12.2015