Дженкинс: Как получить значение из скрипта 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');

Другие вопросы по тегам