Jenkins xUnit插件报错:无法创建目录问题排查求助
Jenkins xUnit插件Ubuntu代理目录创建失败排查方案
问题场景
在声明式Jenkins Pipeline中使用GoogleTest生成测试XML文件,通过xUnit插件处理时,流程在非Ubuntu代理上运行正常,但Ubuntu代理执行以下代码时抛出异常:
xunit ( tools: [ GoogleTest(pattern: "gtest_output.xml")], thresholds: [ failed(failureThreshold: '0') ] )
报错信息
java.io.IOException: Cannot create directory '<110-characters-long path>'. at org.apache.commons.io.FileUtils.mkdirs(FileUtils.java:2200) at org.apache.commons.io.FileUtils.forceMkdir(FileUtils.java:1383) at org.jenkinsci.plugins.xunit.service.XUnitTransformerCallable.invoke(XUnitTransformerCallable.java:80) at org.jenkinsci.plugins.xunit.service.XUnitTransformerCallable.invoke(XUnitTransformerCallable.java:38) at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3487) at hudson.remoting.UserRequest.perform(UserRequest.java:212) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:369) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93) at java.lang.Thread.run(Thread.java:748)
插件尝试创建的路径格式为:<工作目录>/generatedJUnitFiles/<哈希值>/,已尝试缩短工作目录路径、手动创建哈希目录以外的层级,均未解决问题。
排查建议与可能原因
1. 权限验证
- 检查Ubuntu代理上Jenkins运行用户(通常为
jenkins)对工作目录及generatedJUnitFiles父目录的写入权限,执行以下命令测试:
如果手动创建失败,说明权限不足,需调整目录权限或将Jenkins用户加入对应用户组。# 查看目录权限 ls -ld <工作目录> # 模拟Jenkins用户创建目录 sudo -u jenkins mkdir <工作目录>/generatedJUnitFiles/test-temp-dir
2. 文件系统与挂载限制
- 检查工作目录所在磁盘的可用空间:
df -h <工作目录> - 确认工作目录是否挂载在特殊文件系统(如NFS、tmpfs)或存在磁盘配额:
- 查看磁盘配额:
repquota -a - 检查挂载属性:
mount | grep <工作目录所在分区>,确认无ro(只读)或其他限制目录创建的属性。
- 查看磁盘配额:
3. 路径与字符问题
- 检查工作目录路径是否包含Ubuntu文件系统不允许的特殊字符(如非ASCII字符、未转义的空格等),尝试使用纯英文无空格的路径进行测试。
- 验证系统目录长度限制:
110字符通常远低于默认限制,但需确认目标路径未触发系统级限制。# 查看单路径最大长度 getconf PATH_MAX <工作目录> # 查看单个文件名最大长度 getconf NAME_MAX <工作目录>
4. 插件与依赖版本差异
- 对比Ubuntu代理与正常代理的xUnit插件版本,确保两者一致;尝试将Ubuntu代理的xUnit插件更新至最新稳定版。
- 检查Jenkins代理的Java版本是否与xUnit插件兼容,部分插件版本对Java 8/11有明确要求。
5. Jenkins进程资源限制
- 查看Jenkins用户的系统资源限制:
重点关注文件创建、目录相关的限制项,确保无严格限制导致无法创建目录。sudo -u jenkins ulimit -a
内容的提问来源于stack exchange,提问作者AnonA
相关产品推荐
相关产品推荐

