Jenkins 限制此项目可以从属性文件中 运行 的位置
Jenkins Restrict Where This Project Can Run From Properties File
我想使用从上游作业传入的参数将下游 Jenkins 作业限制为 运行 在特定机器上。上游作业创建一个属性文件,其中一个属性指示它应该 运行 的机器(MACHINE_TO_RUN=linux123 in test.properties)。
使用 Post-build 操作将具有所有属性的此文件传递到我的下游作业中:在其他项目上触发参数化构建。这里我从属性文件中指定参数:$WORKSPACE/test.properties
我已验证下游作业确实接收并处理了该文件。 MACHINE_TO_RUN=linux123 在我的环境变量中列出。
如何使用此 env 变量来限制作业的位置 运行。我试过将 "Restrict where this project can be run" 设置为 ${MACHINE_TO_RUN},但没有成功。
有人有这方面的经验吗?
更新:以下是我的实现方式。
下载https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Label+Assignment+plugin
构建参数与此插件绑定。因此,如果您将云 ID 或节点传递到作业中,例如 MACHINE_TO_RUN.
该插件可以让您编写一个 groovy 脚本,让您 return 将作业 运行.
return MACHINE_TO_RUN;
我尝试使用环境变量参数化 "Restrict where this project can be run" 中的标签表达式,但没有成功。
我想推荐你:
- 在上游作业的常规构建步骤之后,创建另一个构建步骤 "Process Job DSLs"
- 使用 groovy 脚本创建下游作业,通过这样做,您可以在该 groovy 脚本中设置 "Restrict where this project can be run"。
您可以查看 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
}
早上刚刚实现了与 NodeLabel Parameter Plugin 非常相似的东西。因此,您 "parametrize" 具有 "Label" 类型的额外参数的下游作业(仅在安装上述插件后可用)并从您拥有的任何来源为该参数提供值(test.properties 文件在你的情况下)。
此外,您不必再为下游作业处理 "Restrict where this project can be run" 设置。
例如,假设您在 Jenkins 中有两个作业 "BUILD" 和 "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 }
}
}
这几乎是您获得所需行为所需要的。
我遇到了同样的问题,并设法用 NodeLabel Parameter Plugin 解决了它。
因此,就我而言,我使用了一个多作业项目来调用一个自由式项目。多作业项目非常好,因为它们可以并行 运行 个子项目。确保您只需从 multijob 传递节点名称参数,它会自动确保子项目在给定节点中执行。标签也是有效的节点名称参数。
在这种情况下,我不必搞乱 groovy
。
我想使用从上游作业传入的参数将下游 Jenkins 作业限制为 运行 在特定机器上。上游作业创建一个属性文件,其中一个属性指示它应该 运行 的机器(MACHINE_TO_RUN=linux123 in test.properties)。
使用 Post-build 操作将具有所有属性的此文件传递到我的下游作业中:在其他项目上触发参数化构建。这里我从属性文件中指定参数:$WORKSPACE/test.properties
我已验证下游作业确实接收并处理了该文件。 MACHINE_TO_RUN=linux123 在我的环境变量中列出。
如何使用此 env 变量来限制作业的位置 运行。我试过将 "Restrict where this project can be run" 设置为 ${MACHINE_TO_RUN},但没有成功。
有人有这方面的经验吗?
更新:以下是我的实现方式。
下载https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Label+Assignment+plugin
构建参数与此插件绑定。因此,如果您将云 ID 或节点传递到作业中,例如 MACHINE_TO_RUN.
该插件可以让您编写一个 groovy 脚本,让您 return 将作业 运行.
return MACHINE_TO_RUN;
我尝试使用环境变量参数化 "Restrict where this project can be run" 中的标签表达式,但没有成功。
我想推荐你:
- 在上游作业的常规构建步骤之后,创建另一个构建步骤 "Process Job DSLs"
- 使用 groovy 脚本创建下游作业,通过这样做,您可以在该 groovy 脚本中设置 "Restrict where this project can be run"。
您可以查看 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
}
早上刚刚实现了与 NodeLabel Parameter Plugin 非常相似的东西。因此,您 "parametrize" 具有 "Label" 类型的额外参数的下游作业(仅在安装上述插件后可用)并从您拥有的任何来源为该参数提供值(test.properties 文件在你的情况下)。
此外,您不必再为下游作业处理 "Restrict where this project can be run" 设置。
例如,假设您在 Jenkins 中有两个作业 "BUILD" 和 "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 }
}
}
这几乎是您获得所需行为所需要的。
我遇到了同样的问题,并设法用 NodeLabel Parameter Plugin 解决了它。
因此,就我而言,我使用了一个多作业项目来调用一个自由式项目。多作业项目非常好,因为它们可以并行 运行 个子项目。确保您只需从 multijob 传递节点名称参数,它会自动确保子项目在给定节点中执行。标签也是有效的节点名称参数。
在这种情况下,我不必搞乱 groovy
。