Jenkins流水线Groovy脚本简单变量比对失败问题求助
问题根因
- Jenkins 流水线的
env全局环境变量对象会自动将所有存入的值转换为字符串类型,即使赋值源是整数类型,存入后也会变成对应数值的字符串形式。 - 你代码中
email_when.ALWAYS是int类型的1,存入env.EMAIL_WHEN后实际取值为字符串"1",不同类型的值做等值判断时结果为false,调用equals方法时因为类型不匹配也会返回false,所以会进入else分支。
解决方案
你可以任选以下任意一种方案解决类型不匹配的问题:
方案1:将环境变量转为整数后比对
if (env.EMAIL_WHEN.toInteger() == email_when.ALWAYS) { echo ("Send email.") } else { echo ("NO EMAIL") }
方案2:将常量转为字符串后比对
if (env.EMAIL_WHEN == email_when.ALWAYS.toString())
方案3:避免存入env变量(无跨阶段传递需求时用)
如果该参数不需要在流水线不同阶段、或者外部调用步骤中传递,不需要存入env对象,直接引用类常量做判断即可,不会出现类型转换问题。
内容的提问来源于stack exchange,提问作者bsabiston
相关产品推荐
相关产品推荐

