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 
}