Jenkins Pipeline配置attachmentsPattern访问/tmp文件时Ant GLOB语法报错
问题排查与解决方法
报错核心是最终生成的Ant GLOB模式为/tmp/*/tmp/aaa-development-build.diff.html,存在重复路径拼接错误,不符合Ant路径匹配规则,可按以下步骤排查修复:
1 定位路径拼接异常根因
你预期的匹配模式是匹配/tmp目录下的${APPNAME}-${ENVIRONMENT}-build.diff.html文件,但最终生成的模式多出来了/tmp/前缀段,优先检查两个配置:
- 确认
${APPNAME}变量的赋值正确,没有被错误带上/tmp/前缀,正常应该仅为纯应用名称,比如示例中的aaa - 检查你使用的通知插件配置,部分插件的
attachmentsPattern参数默认基于Jenkins任务工作目录解析路径,传入绝对路径时会出现重复拼接的问题
2 修正匹配模式写法
你当前的模式中/tmp/*${APPNAME}的写法多了不必要的通配符,根据场景选择正确的写法:
场景1:插件支持绝对路径匹配
直接去掉多余的*即可:
attachmentsPattern: "/tmp/${APPNAME}-${ENVIRONMENT}-build.diff.html",
如果需要模糊匹配同应用不同环境的差异文件,调整为:
attachmentsPattern: "/tmp/${APPNAME}-*-build.diff.html",
场景2:插件不支持访问工作区外路径(推荐方案)
绝大多数Jenkins插件默认仅允许读取当前任务工作区内的文件,直接访问系统/tmp目录可能存在权限、路径解析异常问题,建议修改生成报告的逻辑,把文件写入工作区后再匹配:
def publisher = LastChanges.getLastChangesPublisher null, "SIDE", "LINE", true, true, "", "", "", "", "" publisher.publishLastChanges() def htmlDiff = publisher.getHtmlDiff() // 将报告写入当前Jenkins任务的工作区 writeFile file: "${APPNAME}-${ENVIRONMENT}-build.diff.html", text: htmlDiff
对应匹配模式直接写工作区内的相对路径即可:
attachmentsPattern: "${APPNAME}-${ENVIRONMENT}-build.diff.html",
3 验证配置合法性
修改后确认最终生成的匹配模式没有重复路径段,符合Ant GLOB规则:
- 单通配符
*仅匹配单个目录下不含路径分隔符的任意字符 - 跨目录匹配使用双通配符
** - 不要重复拼接根路径前缀
内容的提问来源于stack exchange,提问作者Edcel Cabrera Vista
相关产品推荐
相关产品推荐

