Дженкинс: Как получить значение из скрипта Groovy, который будет использоваться в последующем проекте?
Я должен быть в состоянии получить некоторую ведомую информацию для использования на одном из моих рабочих мест.
У меня есть системный скрипт Groovy для доступа к ведомой информации
for (aSlave in hudson.model.Hudson.instance.slaves) {
println('====================');
println('Name: ' + aSlave.name);
println('getLabelString: ' + aSlave.getLabelString());
... In here I can dig out the information that I need
}
Есть ли способ, как я могу получить информацию, чтобы использовать ее в задании после сборки?
Мне нужно добавить вывод в параметр или что-то, что может быть использовано заданием после сборки?
2 ответа
Я использовал плагин EnjEnv, и у него есть раздел "Evaludated Groovy Script", в котором вы можете делать все что угодно... но он должен возвращать карту свойств, которая будет использоваться в качестве переменных окружения. Я не знаю, как вернуть значение из скрипта Groovy, так что это сработало для меня, так как я могу ссылаться на свойства (или переменные окружения) практически из любого программного обеспечения
import hudson.model.*
String labelIWantServersOf = TheLabelUsedOnTheElasticAxisPlugin; // This is the label assosiated with nodes for which i want the server names of
String serverList = '';
for (aSlave in hudson.model.Hudson.instance.slaves) {
out.println('Evaluating Server(' + aSlave.name + ') with label = ' + aSlave.getLabelString());
if (aSlave.getLabelString().indexOf(labelIWantServersOf ) > -1) {
serverList += aSlave.name + ' ';
out.println('Valid server found: ' + aSlave.name);
}
}
out.println('Final server list where SOAP projects will run on = ' + serverList + ' which will be used in the environment envInject map');
Map<String, String> myMap = new HashMap<>(2);
myMap.put("serverNamesToExecuteSoapProjectOn", serverList );
return myMap;
Затем я записываю переменную среды serverNamesToExecuteSoapProjectOn в файл свойств с помощью пакетного сценария Windows и передаю файл свойств в следующую сборку в качестве параметризованной сборки.
Если вы используете Windows, у меня есть для вас решение: вы можете сохранить ваши настройки в переменные среды, которые можно использовать для выполняемой в данный момент работы. Они больше не будут существовать после завершения задания, но их можно использовать для действий после сборки. Вот пример:
//Creating String to make my example more clear
String myString = 'this is just a test!';
//Create an environment variable, so the Jenkins job can use the parameter
def pa = new ParametersAction([new StringParameterValue('PARAMETER_NAME', myString)]);
// Add variable to current jobs environment variables.
Thread.currentThread().executable.addAction(pa)
println 'Script finished! \n';
После запуска сценария вы можете использовать%PARAMETER_NAME% (если действия после сборки и т. Д.), Чтобы получить доступ к его содержимому.
Дополнительная подсказка: для просмотра всех доступных переменных среды вы можете использовать шаг сборки "Выполнить пакетную команду Windows" и нажать "Просмотреть список доступных переменных среды" в нижней части (переменные, которые вы создаете во время выполнения сценариев, исключаются). Но вы можете использовать эти переменные в вашем скрипте groovy, например:
String jenkinsHome = System.getenv('JENKINS_HOME');