Доступ к глобальной собственности Jenkins в Groovy

На данный момент я определил переменную среды GLOBAL_VAR со значением 'test' в разделе Управление Jenkins -> Настроить систему -> Глобальные свойства. У меня есть сценарий оболочки, когда проект строится, содержащий

echo "The value of the global variable is ${GLOBAL_VAR}"

Если выполнено, результат - то, что я ожидал:

The value of the global variable is test

Теперь моя проблема в том, что я хочу получить доступ к этой переменной в скрипте Groovy, который используется для создания раскрывающегося меню в параметризованных свойствах сборки Jenkins. Это раскрывающееся меню содержит значения, также используемые в сценариях оболочки, выполняемых при выполнении сборки. Таким образом, выпадающие элементы должны создаваться, когда кто-то нажимает "Построить с параметрами" в самом Jenkins, например, перед началом любой сборки.

Я не хочу менять код скрипта оболочки и выпадающий скрипт Groovy каждый раз, когда я хочу изменить эти значения. Более того, я хочу использовать одни и те же значения в разных заданиях сборки, что означает, что мне нужно менять их все каждый раз, когда мне нужно изменить переменную.

Динамический параметр выбора, создающий раскрывающееся меню, содержит только следующее выражение Groovy для создания вариантов выбора:

 def list = ["Option 1", "Option 2", "Option 3", "Option 4"]

И я хочу добавить значение моего GLOBAL_VAR в этот список.

Кто-нибудь знает, как получить доступ к переменным среды Jenkins в Groovy? Или кто-нибудь знает другой способ управления переменными, которые я хочу использовать как в параметре динамического выбора (раскрывающееся меню), так и в сценариях оболочки, выполняемых при сборке?

4 ответа

Вот пример некоторого рабочего кода:

import jenkins.model.*
nodes = Jenkins.instance.globalNodeProperties
nodes.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
envVars = nodes[0].envVars
envVars['MY_GLOBAL_PROPERTY']

Источники моего решения:

https://gist.github.com/johnyzed/2af71090419af2b20c5a

http://pghalliday.com/jenkins/groovy/sonar/chef/configuration/management/2014/09/21/some-useful-jenkins-groovy-scripts.html

Примечание для модератора "жесткого ядра", который удалил мой предыдущий ответ: я потратил довольно много часов на поиск в Интернете, прежде чем найти правильное решение, вы не должны удалять сообщения, не зная, о чем идет речь. Я нахожу такое поведение довольно обескураживающим:(

В "Выполнить скрипт Groovy" вы можете получить доступ к глобальным (и построить) переменным с помощью:

def env = System.getenv()
println(env['GLOBAL_VAR'])

Ты можешь использовать:

import jenkins.model.*
instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)

newEnvVarsNodeProperty = null
envVars = null

if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
  newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
  globalNodeProperties.add(newEnvVarsNodeProperty)
  envVars = newEnvVarsNodeProperty.getEnvVars()
} else {
  envVars = envVarsNodePropertyList.get(0).getEnvVars()

}

envVars.put("FOO", "foo")
instance.save()

Решение было найдено здесь

Кто-нибудь знает, как получить доступ к переменным среды Jenkins в Groovy?

Я могу привести пример из работы Дженкинса, которую мы используем. Задание параметризовано и предоставляет пользователю возможность установить множество значений, одним из которых является "InstallVersion" (значение по умолчанию - -1). Кроме того, мы настроили переменную среды с именем "JENKINS_TRUNK_LABEL". Я не буду вдаваться в подробности об этой работе, но вот как мы ссылаемся на "JENKINS_TRUNK_LABEL" в скрипте Groovy.

if (InstallVersion == "-1")
{
  InstallVersion = "$JENKINS_TRUNK_LABEL"
}
Другие вопросы по тегам