Jenkins限制此项目可从属性文件运行的位置
我想限制下游Jenkins作业使用从上游作业传入的参数在特定机器上运行。上游作业创建一个属性文件,其中一个属性指示应该运行的机器(MACHINE_TO_RUN = linux123,位于test.properties中)。Jenkins限制此项目可从属性文件运行的位置
包含所有属性的这个文件使用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脚本,它可以让你返回你希望作业运行的地方。
return MACHINE_TO_RUN;
刚刚实施的东西非常多在早上与NodeLabel Parameter Plugin一样。因此,您使用“Label”类型的额外参数“参数化”下游作业(仅在安装上述插件后才可用),并为您提供此参数的值(无论您拥有何种来源(您的案例中的test.properties文件) 。
此外,您不必处理“限制可以运行此项目的位置”设置了下游作业。
例如,假设你有两个作业“构建”和“TEST”,在詹金斯以下定义(使用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 }
}
}
这几乎是你所需要的以获得所需的行为。
我尝试使用环境变量参数化“限制可以运行此项目的位置”中的标签表达式,但没有生成它。
我想向您推荐:
- 你的上游作业的常规构建步骤后,创建另一个构建步骤“处理工作的DSL”
- 使用Groovy脚本来创建下游的工作,通过这样做,您可以在该groovy脚本中设置“限制可以运行此项目的位置”。
你可以看看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
}