如何将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}" }
报错情况
- 使用
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
- 移除
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
- 尝试三元表达式+
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
相关产品推荐
相关产品推荐

