我正在编写一个Jenkins文件,它使用NodeLabel Parameter Plugin作为jenkins。在这里,我使用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")
{
...
}
答案 0 :(得分:1)
NodeLabel Parameter Plugin在Pipeline和Blue Ocean上无法正常使用,就像它不经常更新一样(请参阅revision history)。 Jenkins插件必须遵循requirements才能与管道兼容。
不幸的是,问题仍然没有解决(何时解决尚不知道): https://issues.jenkins-ci.org/browse/JENKINS-43720
问题是我无法使用env.NODE_PARAM或NODE_PARAM来获取 多个选择的节点,因为它们只是字符串表示形式 一个节点。
您可以投票给jira-task JENKINS-43720(单击“为此问题投票” ),或参与插件开发。
到目前为止,我发现我通过使用另一个参数选项 choice (模仿)来模仿插件行为的笨拙方式(但这在Blue Ocean中有效!):
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) { }
,或者您可以使用选项 string :
properties([
parameters([
string(defaultValue: "node_1, node_2", description: "", name: "NODE", trim: false)
])
])
// parse here the param env.NODE