如何在Jenkins中使用Groovy读取仓库内MANIFEST.MF文件内容
Jenkins读取MANIFEST.MF文件报错解决方案
错误根因
- 代码存在拼写错误:两处路径属性均写错,分别将
path写为Paht、paht,导致readFile接收的路径参数完全无效 - 未提前拉取代码:
findFiles基于Jenkins任务当前工作空间查找文件,若未执行checkout步骤拉取代码库内容,自然找不到目标文件 - 匹配规则不匹配场景:当前
glob规则只能匹配工作空间下解压后的物理MANIFEST.MF文件,若目标文件在jar/war等压缩包内,无法被直接匹配到 - 权限不足:Jenkins任务执行用户对目标文件没有读取权限,也会抛出找不到文件的报错
修复后代码
stage('Read File'){ steps{ // 先拉取代码库内容到当前工作空间 checkout scm script{ def baseDir = "**/MANIFEST.MF" def dateien = findFiles(glob: baseDir) echo "匹配到的文件数量:${dateien.size()}" // 空列表校验,避免无意义的后续执行 if(dateien.size() == 0){ error "未匹配到任何MANIFEST.MF文件,请检查代码库结构与匹配规则" } dateien.each{ echo "File: ${it.name}" echo "Path: ${it.path}" def content = readFile(file: it.path) println(content) } } } }
额外排查建议
- 若需要读取压缩包内的MANIFEST.MF,需先使用
unzip等命令解压对应压缩包后再执行查找 - 排查阶段可在拉取代码后增加
sh 'find . -name MANIFEST.MF'(Linux节点)或bat 'dir /s /b MANIFEST.MF'(Windows节点)步骤,直接打印工作空间内所有符合名称的文件路径,确认匹配规则是否正确 - 确认Jenkins执行用户对工作空间下的文件有读取权限
内容的提问来源于stack exchange,提问作者user1938143
相关产品推荐
相关产品推荐

