Ответ 1
Все переменные среды доступны с помощью env
, например. ${env.JOB_NAME}
.
Я пытаюсь использовать DSL-конвейеры в Jenkins. Я подумал, что было бы хорошо, если бы я мог использовать название проекта как часть моего script.
git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
Я получаю сообщение об ошибке:
groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
Я думал, что я слежу за этими направлениями, и они упоминают JOB_NAME
как одну из переменных.
Я решил попробовать:
sh 'env'
в моей DSL, и это печатает:
JOB_NAME = foo-bar
что я ожидаю.
В другом блоге говорится:
Использование переменных окружения
У нас есть два способа получить их ценность. Свойства, переданные-D=
во время запуска, мы могли бы читать какSystem.getProperty("key")
благодаря сильному отношению Groovy к Java.Чтение обычных переменных среды в Java-способе - это
System.getenv("VARIABLE")
...
Попробуем это:
println "JOB_NAME = " + System.getenv('JOB_NAME');
Теперь я получаю:
java.lang.NullPointerException: Cannot get property 'System' on null object
Нулевой объект? Но я вижу, что JOB_NAME
является переменной окружения!
Как я прочитал в $JOB_NAME
в DSL script в задании Pipeline. Я пытаюсь выполнить задачу Pipeline, и когда я получу эту работу, это сделает Multibranch Pipeline с Jenkinsfile
.
Все переменные среды доступны с помощью env
, например. ${env.JOB_NAME}
.
Действительно, просто используйте ${env.JOB_NAME}
для доступа к известной переменной.
Однако, если вам нужно получить доступ к переменной окружения, где имя задается другой переменной (динамический доступ), просто используйте env["your-env-variable"]
.
У меня возникла проблема, когда я сконфигурировал 3 переменные среды (в Jenkins -> Administer -> Configure System -> Environment variables
), назовите их ENV_VAR_1
, ENV_VAR_2
, ENV_VAR_3
.
Теперь я хочу динамически обращаться к ним, я могу сделать как таковой:
def envVarName = "ENV_VAR_" + count // Suppose count is initialized in a loop somewhere above...
def value = env[envVarName] // Will be resolved to env["ENV_VAR_1"] depending on count value
Мои переменные среды в конфигурации Jenkins выглядят следующим образом:
Ладно, это действительно раздражало меня сегодня. В конечном счете, меня проделали несколько вещей:
env.JOB_NAME
.Этот вопрос SO оказался тем, что помогло мне взломать код: Jenkins Workflow Checkout Доступ к BRANCH_NAME и GIT_COMMIT
У меня возникла проблема с тем, что это не работает. Глобально заданные свойства/переменные среды были доступны только на этапе node
. Это ошибка в версии 2.4 плагина Pipeline. Если вы столкнулись с этой проблемой, обновите ее до 2,5, и ваши глобальные свойства будут доступны в любом месте script. Я разместил это в wiki здесь с помощью теста script, который я использовал.