我想使用从上游作业传入的参数来限制下游Jenkins作业在特定计算机上运行。上游作业创建一个属性文件,其中一个属性指示应运行的机器(test.properties中的MACHINE_TO_RUN = linux123)。
使用Post-build Action将包含所有属性的文件传递到我的下游作业:在其他项目上触发参数化构建。在这里,我从属性文件中指定参数:$ WORKSPACE / test.properties
我已经验证下游作业确实接收并处理了该文件。 MACHINE_TO_RUN = linux123列在我的环境变量中。
如何使用此env变量来限制作业的运行位置。我已经尝试将“限制此项目可以运行的位置”设置为$ {MACHINE_TO_RUN},但没有运气。
任何人都有这方面的经验吗?
更新:以下是我实现此目的的方法。
下载https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Label+Assignment+plugin
构建参数与此插件绑定。因此,如果您将云ID或节点传递给作业,例如MACHINE_TO_RUN。
该插件可让您编写一个groovy脚本,让您返回要运行作业的位置。
返回MACHINE_TO_RUN;
答案 0 :(得分:0)
我尝试使用环境变量参数化“限制可以运行此项目的位置”中的标签表达式但是没有成功。
我想推荐你:
您可以查看Jenkins DSL Doc并尝试编写一个groovy脚本来创建下游作业
吸吮一个groovy脚本看起来像:
// You have to have MACHINE_TO_RUN as your environment variable in your upstream job
def machine_to_run=${MACHINE_TO_RUN}
job(your_downstream_job_name) {
label(machine_to_run)
parameters {
//The parameter setting of your downstream job
}
steps {
//The build step of your downstream job
}
//Other settings of your downstream job
}
答案 1 :(得分:0)
早上用NodeLabel Parameter Plugin实现了非常相似的东西。所以,你"参数化"带有额外参数"标签"的下游作业type(仅在安装上面提到的插件后才可用)并从您拥有的任何源提供此参数的值(在您的情况下为test.properties文件)。
此外,您无需处理"限制此项目可以运行的位置"为下游工作设置。
例如,假设你有两份工作" BUILD"和" TEST"在Jenkins中使用以下定义(使用类似Groovy的伪代码):
[TEST]
parameters: { targetNode: typeof(Label), defaultValue: '' }
[BUILD]
parameters: {}
set-env-variables: { from: './test.properties' } // or your way to set env vars
trace-env-variable: { variable: $MACHINE_TO_RUN } // linux123
post-build: {
trigger: {
job: "TEST", parameters: { targetNode: $MACHINE_TO_RUN }
}
}
这几乎是你获得理想行为所需要的。
答案 2 :(得分:-1)
我遇到了同样的问题,并设法用NodeLabel Parameter Plugin解决了这个问题。
所以,就我而言,我正在使用multjob项目来调用自由风格的项目。多工作项目非常好,因为它们可以并行运行子项目。确保您只需从多工具传递node-name参数,它会自动注意子项目在给定节点中执行。标签也是有效的节点名称参数。
在这种情况下,我没有弄乱groovy
。