Jenkinsfile使用when判断env.JOB_NAME报错,如何实现阶段触发?
基于env.JOB_NAME触发Jenkins阶段的正确写法
当然可以通过when条件基于env.JOB_NAME运行特定阶段!你遇到的错误是因为Jenkins的when闭包需要使用内置的条件指令(比如expression、equals),而不能直接写Groovy表达式。直接写"${env.JOB_NAME}" == 'xxx'会被Jenkins判定为无效的条件结构,所以才会抛出Expected a when condition和Empty when closure的错误。
下面给你两种可行的正确写法:
方法1:使用expression条件(通用Groovy表达式)
这是最灵活的方式,支持任意Groovy逻辑判断:
#!/usr/bin/env groovy pipeline { agent any stages { stage('Get ID') { when { // 直接在expression闭包里写Groovy判断,不需要额外加引号包裹变量 expression { env.JOB_NAME == 'Notification Sender (dev)' } } steps { echo "${env.JOB_NAME}" } } } }
方法2:使用equals条件(针对字符串相等的简洁写法)
如果只是单纯判断字符串相等,用equals会更直观:
#!/usr/bin/env groovy pipeline { agent any stages { stage('Get ID') { when { equals expected: 'Notification Sender (dev)', actual: env.JOB_NAME } steps { echo "${env.JOB_NAME}" } } } }
扩展:匹配多个Job名称
如果需要匹配多个Job名称,可以用anyOf组合多个条件,或者用正则表达式:
多条件匹配
when { anyOf { equals expected: 'Notification Sender (dev)', actual: env.JOB_NAME equals expected: 'Notification Sender (test)', actual: env.JOB_NAME } }
正则匹配
when { expression { env.JOB_NAME =~ /Notification Sender \((dev|test|prod)\)/ } }
内容的提问来源于stack exchange,提问作者eekfonky
相关产品推荐
相关产品推荐

