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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:03