You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:16:33