TeamCity构建时Allure文件夹报错问题求助
问题现象
- 执行命令
gradlew clean test时,报错:
Execution failed for task ':clean'. org.gradle.api.UncheckedIOException: java.io.IOException: Unable to delete directory 'D:\BuildAgent\work{BUILD_NUMBER}\build'
Failed to delete some children. This might happen because a process has files open or has its working directory set in the target directory.- D:\BuildAgent\work{BUILD_NUMBER}\build\allure-results
- 执行命令
gradlew test时,报错:
Execution failed for task ':test'. org.gradle.api.GradleException: Could not read path 'D:\BuildAgent\work{BUILD_NUMBER}\build\allure-results\history'.
解决方案
排查并释放进程占用
用Windows的资源监视器(Ctrl+Shift+Esc → 性能 → 打开资源监视器),在关联的句柄中搜索allure-results,找到占用该目录的进程并结束。也可以用命令行工具handle.exe执行handle.exe build\allure-results定位进程,再用taskkill /PID <进程ID> /F强制终止。调整Gradle任务配置
在项目的build.gradle中添加以下配置,增强clean任务的删除能力,同时确保test任务执行前清理历史目录:clean { // 强制删除allure结果目录 delete 'build/allure-results' doLast { def allureDir = file('build/allure-results') if (allureDir.exists()) { allureDir.deleteDir() } } } test { // 确保test任务依赖clean完成 dependsOn clean doFirst { def historyDir = file('build/allure-results/history') if (historyDir.exists()) { historyDir.deleteDir() } } }新增TeamCity前置清理步骤
在TeamCity的构建配置中,添加一个命令行步骤放在Gradle步骤之前,执行手动删除命令:rmdir /s /q "%teamcity.build.workingDir%\build\allure-results"该命令会强制删除目标目录及其子文件,避免Gradle clean任务的删除限制。
升级Allure Gradle插件
检查项目中Allure插件版本,升级到最新稳定版,修复可能存在的资源释放bug:plugins { id 'io.qameta.allure' version '2.24.0' // 替换为最新版本号 }检查TeamCity代理权限
确认运行TeamCity代理的用户对构建工作目录(D:\BuildAgent\work{BUILD_NUMBER})拥有完全控制权限,避免因权限不足导致的删除/读取失败。
内容的提问来源于stack exchange,提问作者ᴜsᴇʀ

