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] =]
我需要能够获得一些奴隶信息以用于我的一项工作。
我有一个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] =]