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

Jenkinsfile中if-else条件判断失效问题求助

问题分析与解决

你的核心问题是if条件的逻辑表达式写法错误,导致无论ENVIRONMENT是什么值,条件永远为真,只会执行if代码块,不会进入else。

错误原因

原条件env.ENVIRONMENT == 'dev'||'uat'的逻辑完全不符合预期:
在Groovy中,||运算符两侧需要是完整的布尔表达式。而'uat'是一个非空字符串,会被直接判定为true,所以整个条件等价于(env.ENVIRONMENT == 'dev') || true,结果永远是true——哪怕ENVIRONMENT是pt,也会走if块。

正确写法

你需要把条件改成两边都是完整的相等判断,或者用更简洁的in操作符:

写法1:完整布尔表达式

if (env.ENVIRONMENT == 'dev' || env.ENVIRONMENT == 'uat') {
    // if块逻辑
} else {
    // else块逻辑
}

写法2:使用in操作符(更简洁)

if (env.ENVIRONMENT in ['dev', 'uat']) {
    // if块逻辑
} else {
    // else块逻辑
}

修正后的完整代码示例

stage("Docker Build") {
    echo "1. Environment is ${ENVIRONMENT}"
    if (env.ENVIRONMENT in ['dev', 'uat']) {
        echo "2. Environment is ${ENVIRONMENT}"
        echo "This is Dev stage"

        docker.image("nexus-az.${dockerBuildImageVersion}").inside("-e HOME=${WORKSPACE}") {
            sh 'npm run run-envsub -- --env CONTEXTPATH=/app-${ENVIRONMENT}'
            sh 'ng build --configuration=${ENVIRONMENT}-oci --base-href /app-${ENVIRONMENT}/'
        }

    } else {
        echo "3. Environment is ${ENVIRONMENT}"
        echo "This is PT stage"
        docker.image("nexus-az.${dockerBuildImageVersion}").inside("-e HOME=${WORKSPACE}") {
            sh 'npm run run-envsub -- --env CONTEXTPATH=/app-${ENVIRONMENT}'
            sh 'ng build --configuration=w${ENVIRONMENT}-oci --base-href /app-${ENVIRONMENT}/'
        }
    }
}

额外注意点

  • 如果你用params.ENVIRONMENT来获取参数,逻辑表达式的写法是一样的,同样需要修正为上述正确形式;
  • Groovy中不需要在if条件里用${}包裹变量,直接写变量名即可,比如if (ENVIRONMENT == 'dev'),不需要if (${ENVIRONMENT} == 'dev')。

内容的提问来源于stack exchange,提问作者Samuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:34