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
相关产品推荐
相关产品推荐

