Mat*_*gen 5 jenkins jenkins-plugins jenkins-pipeline
我正在编写一个 Jenkinsfile,它使用jenkins 的NodeLabel 参数插件。在这里,我使用 NodeParameterDefinition 使用户能够选择应该进行构建的节点。我启用了allowMultiSelectionForConcurrentBuilds,但在访问Jenkinsfile中的参数值时,我仍然只得到一个只有一个节点名称的字符串。参数值类型也是字符串,如何获取用户为该参数选择的所有节点?
参数定义:
[
$class: 'NodeParameterDefinition',
allowedSlaves: ['ALL (no restriction)'],
defaultSlaves: ['master'],
description: 'What nodes to run the build on.',
name: 'BUILD_NODE',
nodeEligibility: [$class: 'AllNodeEligibility'],
triggerIfResult: 'allowMultiSelectionForConcurrentBuilds'
]
Run Code Online (Sandbox Code Playgroud)
所以如果我在执行时选择了多个节点,那么在访问这个参数值时仍然只能得到一个节点名称。
echo "Will build on $BUILD_NODE";
Run Code Online (Sandbox Code Playgroud)
管道脚本是否无法启用多节点选择?
如何访问参数值:
echo "Will build on $BUILD_NODE";
node("$BUILD_NODE")
{
...
}
Run Code Online (Sandbox Code Playgroud)
NodeLabel Parameter Plugin不能与 Pipeline 和Blue Ocean顺利配合,就像它不经常更新一样(请参阅修订历史记录)。Jenkins 插件必须遵循要求才能与 Pipeline 兼容。
不幸的是,该问题仍未解决(未知何时解决): https ://issues.jenkins-ci.org/browse/JENKINS-43720
问题是我无法使用 env.NODE_PARAM 或 NODE_PARAM 来获取节点的多个选择,因为它们只是单个节点的字符串表示形式。
您可以为这个 jira-task JENKINS-43720 投票(点击“为该问题投票”),或者参与插件开发。
到目前为止,我发现通过使用另一个参数选项选择来模仿插件行为的笨拙方法(但这在蓝海中有效!):
properties([
parameters([
choice(choices: ["none", "node_1", "node_2"], description: "", name: "NODE_1"),
choice(choices: ["none", "node_1", "node_2"], description: "", name: "NODE_2")
])
])
// here you can write your behaviour
// e.g. validation of params, e.g. if 'none' is selected, then use the default node_X
node(env.NODE_1) { }
node(env.NODE_2) { }
Run Code Online (Sandbox Code Playgroud)
或者您可以使用选项字符串:
properties([
parameters([
string(defaultValue: "node_1, node_2", description: "", name: "NODE", trim: false)
])
])
// parse here the param env.NODE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |