Jenkins Pipeline执行mvn test时数据驱动框架构建失败
Jenkins Pipeline执行mvn test报xlsx文件访问拒绝问题解决方案
根因定位
报错触发点是maven-resources-plugin:3.2.0执行测试资源拷贝阶段,无法访问工作空间路径下的webFormstestData - Copy (2).xlsx文件,相同代码在普通Maven任务可正常运行,说明问题和Pipeline的运行上下文直接相关,常见诱因如下:
- 测试数据文件名包含空格、括号类特殊字符,Pipeline执行bat/shell步骤时路径未正确转义,被插件截断后触发访问拒绝的误报
- 文件被后台进程锁死:上一次构建残留的Excel进程、Jenkins进程未释放target目录下该xlsx文件的句柄,拷贝写入操作被系统拦截
- 运行账号权限不匹配:普通Maven任务默认使用当前登录Windows的用户账号运行,若Jenkins以系统服务模式启动,Pipeline默认使用低权限服务账号运行,对工作空间下特殊路径的文件无读写权限
- 构建残留脏文件:多次构建失败后target目录下的测试资源目录被标记为只读,Pipeline未配置自动清理旧产物的逻辑,写入操作被拒绝
修复步骤
- 第一步先修正文件名:将
webFormstestData - Copy (2).xlsx重命名为无空格、无特殊符号的格式,例如webFormstestData_copy2.xlsx,同步修改项目代码中读取该测试数据的路径配置,从根源避免路径解析异常。 - 第二步在Pipeline中增加构建前清理逻辑:在执行
mvn test命令前,先执行命令清理占用进程和旧构建产物,Windows环境参考命令如下:
也可以直接安装Workspace Cleanup插件,配置构建前自动清空整个工作空间后再拉取代码构建,避免残留文件干扰。:: 强制关闭后台残留的Excel进程,解除文件占用 taskkill /F /IM EXCEL.EXE /T :: 强制删除target目录下的所有旧构建产物 rd /s/q target - 第三步校验Jenkins服务运行权限:打开Windows服务列表,找到Jenkins服务,进入「属性-登录」页,将服务运行账号修改为本地有全量磁盘读写权限的个人账号,保存后重启Jenkins服务再重试构建。
- 第四步修正pom.xml中maven-resources-plugin配置:显式声明xlsx这类二进制文件不做文本过滤,避免插件处理文件时损坏内容触发异常,配置参考:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <encoding>UTF-8</encoding> <nonFilteredFileExtensions> <nonFilteredFileExtension>xlsx</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者N_QA
相关产品推荐
相关产品推荐

