Jenkins Pipeline:使用When条件实现选择参数的阶段执行问题
问题分析与解决方案
你的Jenkins Pipeline stage被跳过的核心原因是when条件的表达式写法错误:
原表达式params.name == 'a|d|f'是在判断参数值是否和字符串"a|d|f"完全相等,而不是判断参数值是否是a、d、f中的任意一个——显然你的参数选项里没有这个值,所以stage每次都会被跳过。
另外还要注意你参数配置里的小问题:choices: 'a\nb\n\c\n\d\ne\nf'里的\c多了一个反斜杠,应该改成c,否则会生成异常的选项。
修正后的几种可行写法
方法1:使用集合的contains方法(可读性最佳)
这种方式把需要匹配的值放进一个集合,直接判断参数是否在集合内,逻辑清晰易懂:
#!/usr/bin/env groovy pipeline { agent any parameters { // 修正了choices里的多余反斜杠 choice( choices: 'a\nb\nc\nd\ne\nf', description: 'name of the student', name: 'name' ) } stages { stage ('callNames') { when { expression { ['a', 'd', 'f'].contains(params.name) } } steps{ echo "selected name is: ${params.name}" //do something } } } }
方法2:使用正则表达式匹配
如果偏好正则写法,可以用==~(精确匹配正则)来判断参数值是否符合a|d|f的规则:
when { expression { params.name ==~ /a|d|f/ } }
或者使用字符串的matches方法:
when { expression { params.name.matches('a|d|f') } }
修改完成后,当你选中a、d或f中的任意一个时,callNames stage就会正常执行,不会再被跳过啦!
内容的提问来源于stack exchange,提问作者user6348718
相关产品推荐
相关产品推荐

