Jenkins基于package.json设置构建名报MacroEvaluationException错误
报错根因
- 你当前安装的Build Name and Description Setter 2.2.0、Token Macro 293.v283932a_0a_b_49两款插件,本身没有内置JSON文件取值的令牌实现,你配置里用的
${JSON,...}宏没有对应的解析逻辑,是触发本次MacroEvaluationException的核心原因。 - 配置本身存在两个潜在触发点:一是相对路径写了
./前缀,宏解析时不会自动识别相对路径语义,会直接拼接字符串查找文件,部分环境下会识别为工作空间下名为"./package.json"的文件,导致找不到目标文件;二是部分老版本宏实现对参数引号的兼容性差,容易出现参数识别失败。 - 若后续补装插件后仍报错,需要排查package.json是否存在JSON语法错误(比如尾部多余逗号、注释内容),或者文件不在Jenkins任务工作空间的对应路径下。
修复步骤
补装功能依赖插件
进入Jenkins插件管理页面,搜索安装 JSON Token Macro 插件,安装完成后重启Jenkins让插件生效,该插件是Token Macro体系下专门提供JSON文件字段读取能力的扩展,缺失该插件时所有${JSON}宏都会直接抛出解析异常。修正构建名配置规则
将原配置的构建名规则替换为以下写法,去掉多余的./路径前缀,确认路径与工作空间内package.json的实际位置匹配:
SQ_${JSON,file="package.json",path="version"}
如果你的package.json存放在代码拉取后的子目录(例如前端项目代码在仓库的web子文件夹下),将file参数改为对应相对工作空间的路径即可,例如file="web/package.json"。
- 兜底方案(宏解析持续异常时使用)
如果插件安装、配置修正后仍存在宏解析问题,可以直接在流水线脚本中读取版本号设置构建名,完全绕开令牌宏的解析逻辑,稳定性更高。需要确保环境已安装Pipeline Utility Steps插件(绝大多数流水线环境默认预装),示例脚本如下:
pipeline { agent any stages { stage('拉取代码并设置构建名') { steps { // 替换为你的代码拉取逻辑 git branch: 'main', url: '你的代码仓库地址' script { // 路径与实际package.json位置匹配 def pkg = readJSON file: 'package.json' currentBuild.displayName = "SQ_${pkg.version}" } } } // 其余构建步骤 } }
内容的提问来源于stack exchange,提问作者Alvaro Maravi
相关产品推荐
相关产品推荐

