2015-01-21 4 views
1

Так что мой google-fu мне не удалось, и книга Дженкинса О'Рейли тоже не помогает.Извлечение переменных узла Jenkins из мастера

У меня есть установка Дженкинса с мастером и 20-нечетными узлами. Я интенсивно использую пользовательские переменные среды на узлах, так как многие из них выполняют аналогичные задачи, только немного разные платформы.

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

Есть ли способ ссылки на них? Моя альтернатива, похоже, состоит в том, чтобы иметь сотни переменных окружения в главном в форме node1_var1, node2_var1, node1_var2, node2_var2 и т. Д., Что просто кажется беспорядочным. Мастер явно знает переменные, так как там конфигурация для них выполнена, но я просто не могу найти способ указать их в задании.

Любая помощь (или насмешки и указывая на очевидные ответы) высоко ценится ...

ответ

1

Вот простой Groovy скрипт, который выводит список переменных среды для каждого ведомого устройства:

for (slave in jenkins.model.Jenkins.instance.slaves) { 
    println(slave.name + ": ") 
    def props = slave.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class) 
    for (prop in props) { 
    for (envvar in prop.envVars) { 
     println envvar.key + " -> " + envvar.value 
    } 
    } 
} 

Внимание : Я не опытный программист Groovy, поэтому я не могу использовать соответствующие идиомы Groovy.

Вы можете запустить это с Jenkins script console, чтобы экспериментировать. Вы также можете запустить «System Groovy Script» в качестве шага сборки. Оба вышеуказанных требуют Groovy plugin. Если вы не используете Groovy в своей работе, вы можете использовать этот скрипт для записи файла свойств, который вы загружаете в той части своей сборки, которая выполняет настоящую работу.

+1

Спасибо. Я использовал немного другое решение в конце, но groovy, казалось, было правильным направлением для поиска. Я использовал EnvInject со следующим скриптом: 'import jenkins.model. * myEnvVars = jenkins.model.Jenkins.instance .getNode ("node1"). getNodeProperties() [0] .getEnvVars() def map = ["nodeVar1": myEnvVars.get ("nodeVar1"), "nodeVar2": myEnvVars.get ("nodeVar2")]; return map; ' –

+0

@Tony, одна заметка на вашем коде, в моем случае с различными плагинами и подчиненной конфигурацией,' nodeProperties [0] 'не всегда содержит переменные среды узла - таким образом, вызов getAll с env var class. –