Jenkins如何将全局环境变量值插入生成的zip压缩包文件名
核心原因
这是Groovy语法的字符串插值规则和Jenkins环境变量的生效域差异导致的:
- Jenkins Pipeline基于Groovy语法开发,只有双引号包裹的Groovy字符串才会解析
${}变量占位符,单引号包裹的字符串会被当做纯字面量处理,不会做任何变量替换。你写的zip步骤是Jenkins Pipeline内置的原生步骤,属于Groovy代码执行域,你用了单引号包裹文件名,所以${BUILDVERSION}直接被当做文件名的固定部分输出了。 - 你写的
sh步骤里的内容是传给系统Shell执行的命令,这时候单引号是Shell语法的单引号,Jenkins会把全局环境变量注入到Shell的运行环境中,Shell执行命令时会自动解析环境变量${BUILDVERSION},所以这一步反而能正常匹配到正确的文件名。
修复方案
把zip步骤的文件名改为双引号包裹,让Groovy在执行步骤前先完成变量替换即可:
// 改用双引号触发Groovy字符串插值 zip zipFile: "test_${BUILDVERSION}.zip" // sh步骤两种写法都可以,保持单引号由Shell解析变量也可,改用双引号由Groovy提前替换也可 sh 'zipinfo -1 test_${BUILDVERSION}.zip'
如果需要避免变量值含特殊字符导致的问题,也可以统一把sh步骤也改用双引号,由Groovy统一完成变量替换后再传给Shell执行:
zip zipFile: "test_${BUILDVERSION}.zip" sh "zipinfo -1 test_${BUILDVERSION}.zip"
内容的提问来源于stack exchange,提问作者vel
相关产品推荐
相关产品推荐

