Jenkins声明式流水线多选参数遍历输出单个字符如何修复
问题原因
extendedChoice 多选参数返回的是用配置的分隔符拼接的字符串,而非节点名数组。直接对字符串执行for循环遍历,会按单个字符迭代,因此输出的是单字符而非完整节点名。
修复方案
- 先将返回的字符串按分隔符
,拆分为数组,同时过滤空值、去除节点名前后多余空格,避免未选择节点或输入有空格时出现异常 - 遍历拆分后的数组即可得到完整节点名
修复后的遍历代码
def nodeList = nodes.split(',').collect { it.trim() }.findAll { it } for (node in nodeList) { echo node }
扩展:选中节点并行执行操作示例
如果需要后续在选中的机器上并行执行任务,可以参考如下声明式流水线写法:
pipeline { agent any parameters { extendedChoice( name: 'nodes', type: 'PT_CHECKBOX', multiSelectDelimiter: ',', // 替换为你的实际节点选项 options: 'node-01,node-02,node-03,node-04' ) } stages { stage('并行执行节点任务') { steps { script { def nodeList = params.nodes.split(',').collect { it.trim() }.findAll { it } // 生成并行任务集合 def parallelTasks = nodeList.collectEntries { nodeName -> ["运行在节点${nodeName}" : { node(nodeName) { stage("节点${nodeName}任务") { echo "当前执行节点:${nodeName}" // 此处填写你要执行的具体操作 sh 'hostname' } } }] } // 触发所有并行任务 parallel parallelTasks } } } } }
内容的提问来源于stack exchange,提问作者Epligam
相关产品推荐
相关产品推荐

