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'
 ]
所以如果我在执行时选择了多个节点,那么在访问这个参数值时仍然只能得到一个节点名称。
echo "Will build on $BUILD_NODE";
管道脚本是否无法启用多节点选择?
如何访问参数值:
echo "Will build on $BUILD_NODE";
node("$BUILD_NODE")
{
   ...
}
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) { } 
或者您可以使用选项字符串:
properties([
    parameters([
       string(defaultValue: "node_1, node_2", description: "", name: "NODE", trim: false)
    ])
])
// parse here the param env.NODE 
| 归档时间: | 
 | 
| 查看次数: | 1315 次 | 
| 最近记录: |