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

如何将Jenkins布尔参数转换为全大写TRUE/FALSE字符串参数?

多分支声明式流水线布尔值转字符串问题解决

问题场景

在多分支声明式流水线中,原本通过bash命令将布尔参数BUILD_PROD转换为字符串TRUE/FALSE,希望改用Groovy原生写法简化逻辑,但尝试多种方式均报错:

原工作代码(基于bash):

steps {
  script {
    BUILD_PROD_FLAG = sh(returnStdout: true, script: "[ ${BUILD_PROD} = true ] && echo TRUE || echo FALSE; ").trim()
    BUILD_PROD_FLAG_SECOND = expression { if (params.BUILD_PROD) { return "TRUE" } else { return "FALSE" } }
  }
  sh "echo alternative way to get true/false set (want this to say FALSE): ${BUILD_FLAG_SECOND}"  
}

报错情况

  1. 使用expression包裹逻辑时,报bash语法错误:
Multibranch_PR-1@tmp/durable-212f3652/script.sh: 1: /home/ubuntu/workspace/s_InsightCamera_Multibranch_PR-1@tmp/durable-212f3652/script.sh: Syntax error: "(" unexpected
  1. 移除expression后,报Groovy编译错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 67: unexpected token: if @ line 67, column 57.
             BUILD_FLAG_SECOND = if (params
                                 ^

1 error
  1. 尝试三元表达式+expression写法时,仍报相同语法错误,且变量被替换为@expression(<anonymous>=org.jenkinsci.plugins.workflow.cps.CpsClosure2@4a286654)。

问题原因

  • expression是声明式流水线顶层指令,不能在script块内使用,script块本身就是Groovy脚本执行环境,直接写Groovy逻辑即可。
  • 代码中存在变量名不一致问题:定义的是BUILD_PROD_FLAG_SECOND,但sh命令中引用的是BUILD_FLAG_SECOND。

正确写法

直接在script块内使用Groovy三元表达式完成布尔值转字符串,同时修正变量名:

steps {
  script {
    BUILD_PROD_FLAG = sh(returnStdout: true, script: "[ ${BUILD_PROD} = true ] && echo TRUE || echo FALSE; ").trim()
    // 直接用Groovy三元表达式,无需expression包裹
    BUILD_PROD_FLAG_SECOND = params.BUILD_PROD ? "TRUE" : "FALSE"
  }
  // 修正变量名,与定义一致
  sh "echo alternative way to get true/false set (want this to say FALSE): ${BUILD_PROD_FLAG_SECOND}"  
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:24:18