Глобальные переменные среды Jenkins в файле Jenkins
Как вызвать глобальные переменные среды в Jenkinsfile?
Например, если у меня есть переменная -
name:credentialsId
value:xxxx-xxxx-xxxxx-xxxxxxxxx
Как использовать его в groovy script?
Я попробовал ${credentialsId}
, но это не сработало. Он просто даст ошибку:
java.lang.NoSuchMethodError: No such DSL method '$' found among steps [ArtifactoryGradleBuild, ........
Ответы
Ответ 1
В файле Jenkins у вас есть Работа с окружением, в котором говорится:
Полный список переменных среды, доступных из Jenkins Pipeline, документируется на localhost: 8080/syntax/globals/enb,
Синтаксис ${env.xxx}
как в:
node {
echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
}
См. также " Управление средой.
Как передать глобальные переменные в файл Jenkins? Когда я говорю глобальные переменные - я имею в виду
Jenkins -> Manage Jenkins -> Configure System -> Global properties -> Environment variables
См. " Настройка переменных окружения"
Настройка переменной среды в Jenkins Pipeline может быть выполнена с помощью шага withEnv
, который позволяет переопределить указанные переменные среды для данного блока Pipeline Script, например:
Jenkinsfile (Pipeline Script)
node {
/* .. snip .. */
withEnv(["NAME=value"]) {
... your job
}
}
Ответ 2
Когда вы ссылаетесь на env в области Groovy, просто используйте env.VARIABLE_NAME, например, чтобы передать BUILD_NUMBER исходящего задания на запущенное задание:
stage ('Starting job') {
build job: 'TriggerTest', parameters: [
[$class: 'StringParameterValue', name: 'upstream_build_number', value: env.BUILD_NUMBER]
]
}
Ответ 3
Скриптовый конвейер
Чтобы прочитать переменную среды, имя которой вы знаете, используйте env.NAME
Чтобы прочитать переменную среды, имя которой неизвестно до времени выполнения, используйте env.getProperty(name)
.
Например, значение из файла конфигурации YAML представляет имя переменной среды:
config.yaml (в рабочей области)
myconfig:
key: JOB_DISPLAY_URL
Jenkinsfile
node {
println("Running job ${env.JOB_NAME}")
def config = readYaml(file:'config.yaml')
def value = env.getProperty(config.myconfig.key)
println("Value of property ${config.myconfig.key} is ${value}")
}
Ответ 4
Для получения значений подходят env.VAR, env ['VAR'], env.getProperty('VAR').
Для установки значений единственным безопасным способом на данный момент является withEnv. Если вы попытаетесь присвоить значения env.VAR, в некоторых случаях это может не сработать, например, для параллельных конвейеров (как в JENKINS-59871).
Ответ 5
Другим синтаксисом является $ENV: xxxx
node {
echo "Running $ENV.BUILD_ID on $ENV.JENKINS_URL" }
Это сработало для меня