File Jenkins限制此项目可以从属性文件运行的位置

File Jenkins限制此项目可以从属性文件运行的位置,file,jenkins,build,properties,restrict,File,Jenkins,Build,Properties,Restrict,我想使用从上游作业传入的参数限制下游Jenkins作业在特定机器上运行。上游作业创建一个属性文件,其中一个属性指示它应该在哪台机器上运行(test.properties中的machine_TO_run=linux123) 这个包含所有属性的文件通过生成后操作:在其他项目上触发参数化生成传递到我的下游作业中。这里我从属性文件中指定参数:$WORKSPACE/test.properties 我已经验证了下游作业确实接收并处理了文件。MACHINE_TO_RUN=linux123列在我的环境变量中 如

我想使用从上游作业传入的参数限制下游Jenkins作业在特定机器上运行。上游作业创建一个属性文件,其中一个属性指示它应该在哪台机器上运行(test.properties中的machine_TO_run=linux123)

这个包含所有属性的文件通过生成后操作:在其他项目上触发参数化生成传递到我的下游作业中。这里我从属性文件中指定参数:$WORKSPACE/test.properties

我已经验证了下游作业确实接收并处理了文件。MACHINE_TO_RUN=linux123列在我的环境变量中

如何使用此env变量来限制作业可以运行的位置。我尝试将“限制此项目可以运行的位置”设置为${MACHINE\u to\u run},但没有成功

有人有这样做的经验吗


更新:下面是我如何实现的

下载

构建参数与此插件绑定。因此,如果将云id或节点传递到作业中,例如MACHINE\u TO\u RUN

该插件将允许您编写groovy脚本,让您返回希望作业运行的位置


使机器返回运行状态

我尝试使用环境变量在“限制此项目可以运行的位置”中参数化标签表达式,但没有成功

我向您推荐:

  • 在上游作业的常规构建步骤之后,创建另一个构建步骤以“处理作业DSL”
  • 使用groovy脚本创建下游作业,通过这样做,您可以在该groovy脚本中设置“限制此项目可以运行的位置”
您可以查看并尝试编写用于创建下游作业的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
}

只是在早上用我的电脑实现了一些非常相似的东西。因此,您可以使用“Label”类型的额外参数“参数化”下游作业(仅在安装上述插件后可用),并从您拥有的任何源(在您的示例中为test.properties文件)为该参数提供一个值

此外,您不必再为下游作业处理“限制此项目可以运行的位置”设置

例如,假设您在Jenkins中有两个作业“构建”和“测试”,定义如下(使用类似Groovy的伪代码):


这正是获得所需行为所需要的。我也遇到了同样的问题,并设法解决了它

所以,在我的例子中,我使用了一个multjob项目来调用一个自由风格的项目。多任务项目非常好,因为它们可以并行运行子项目。确保只从multijob传递node name参数,并且它会自动注意子项目在给定节点中执行。标签也是有效的节点名称参数


在本例中,我不必处理
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 }
     }
  }