Jenkins:如何从要在下游项目中使用的 Groovy 脚本中获取价值?

Jenkins: How to get value from a Groovy Script to be used in a downstream project?

我需要能够获得一些奴隶信息以用于我的一项工作。

我有一个Groovy系统脚本来访问slave信息

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
}

有什么方法可以让我在 Post 构建作业中取回信息?

我需要将输出添加到参数或可以被 Post 构建作业使用的东西?

如果您是 运行 windows,我有一个解决方案供您使用:您可以将设置保存到环境变量中,这些变量可用于当前 运行 作业。一旦作业完成,它们将不再存在,但它们可用于 post-build 操作。这是一个例子:

//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%(如果 post-build-actions 等)来访问其内容。

附加提示:要查看所有可用的环境变量,您可以使用构建步骤 "execute windows batch command" 并单击按钮上的 "See the list of available environment variables"(不包括您在执行脚本时创建的变量)。但是您可以在 groovy 脚本中使用这些变量,例如:

String jenkinsHome = System.getenv('JENKINS_HOME');

我使用了 EnjEnv 插件,它有一个 'Evaludated Groovy Script' 部分,基本上你可以做任何事情...但它应该 return 一个将用作环境的 属性 地图变量。我不知道如何从 Groovy 脚本中 return 一个值,所以这对我有用,因为我几乎可以从任何软件

中引用 属性 (或环境变量)
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;

然后我使用 windows 批处理脚本将环境变量 serverNamesToExecuteSoapProjectOn 写入 属性 文件,并将 属性 文件作为参数化构建传递给下一个构建[=11] =]