Подтвердить что ты не робот

Доступ к построению переменных среды из 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 в качестве шага сборки?

4b9b3361

Ответ 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')