Доступ к построению переменных среды из groovy script на этапе сборки Jenkins (Windows)
Я использую плагин Scriptler, поэтому я могу запустить groovy script как шаг сборки. Мои подчиненные Jenkins работают в окнах в сервисном режиме. С scriptler мне не нужно использовать пакетные скрипты Windows.
Но мне сложно получить переменные окружения на этапе сборки... Это работает:
System.getenv("BASE")
Где BASE
является частью env-vars при запуске jenkins. Однако я хотел бы получить
%JOB_NAME%
Если я добавлю шаг сборки "Выполнение Windows пакетной команды":
echo %JOB_NAME%
Это работает.
Если я добавлю скриптлер script в качестве шага сборки с теми же настройками:
println "JOB_NAME: " + System.getenv("JOB_NAME")
Я получаю:
JOB_NAME: null
Итак, как я могу получить переменные внедренной среды из groovy script в качестве шага сборки?
Ответы
Ответ 1
Скрипт Groovy script, похоже, не получает все переменные среды сборки. Но то, что вы можете сделать, это заставить их в качестве параметров script:
-
Когда вы добавляете шаг сборки Scriptler в свое задание, выберите параметр "Определить script параметры"
-
Добавьте параметр для каждой переменной среды, которую вы хотите передать. Например, "Имя: JOB_NAME", "Значение: $JOB_NAME". Значение будет расширяться из среды сборки Jenkins с использованием переменных типа $envName, большинство полей в настройках конфигурации задания поддерживают это расширение из моего опыта.
-
В вашем script у вас должна быть переменная с тем же именем, что и параметр, поэтому вы можете получить доступ к параметрам с помощью чего-то вроде:
println "JOB_NAME = $JOB_NAME"
Я не использовал Sciptler самостоятельно, кроме некоторых экспериментов, но ваш вопрос представлял интересную проблему. Надеюсь, это поможет!
Ответ 2
слушатель и объекты сборки, присутствующие во время выполнения системы groovy. Вы можете сделать это:
def myVar = build.getEnvironment(listener).get('myVar')
Ответ 3
Возможно, вы сможете получить их так:
def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")
Ответ 4
Единственный способ заставить это работать (в Linux) - следовать этому совету:
https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script
import hudson.model.*
// get current thread / Executor and current build
def thr = Thread.currentThread()
def build = thr?.executable
// if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)
println "param ${hardcoded_param} value : ${hardcoded_param_value}"
Это на Jenkins 1.624, работающем на CentOS 6.7
Ответ 5
В jenkins 2.x, с groovy плагином 2.0, запуском SystemGroovyScript Мне удалось создать переменные, как показано ниже:
def build = this.getProperty('binding').getVariable('build')
def listener = this.getProperty('binding').getVariable('listener')
def env = build.getEnvironment(listener)
println env.MY_VARIABLE
Если вы используете goovy из файла, достаточно простого System.getenv('MY_VARIABLE')