Docker部署的TeamCity代理制品持续累积无法自动清理问题求助
TeamCity代理构建制品(视频文件)累积问题解决方案
根因说明
该问题本质是TeamCity代理的构建工作目录默认不会自动清理历史构建生成的文件,旧测试产生的视频文件一直残留在工作目录的reports文件夹下,每次上传制品时会把所有历史文件一同上传。你之前调整的artifacts_cache相关配置是用于缓存从服务端下载的制品,和构建本地生成的文件无关,因此不会生效。
可行解决方案
方案1:构建前主动清理报告目录(最推荐,不影响构建速度)
在构建步骤最开头新增执行脚本的步骤,直接清空本次构建工作目录下的reports文件夹即可:
- Linux代理执行命令:
rm -rf ./reports && mkdir -p ./reports
- Windows代理执行命令:
rmdir /s /q reports 2>nul && mkdir reports
方案2:配置构建自动清理全工作目录
如果不需要保留工作目录内的任何历史文件,可以直接开启构建级别的自动清理配置:
- 打开对应构建的配置页面,进入「版本控制设置」选项卡
- 点击「检出规则」旁的「高级设置」
- 找到「清理工作目录」选项,选择「每次构建前清理所有文件」
开启后每次构建拉取代码前会清空整个工作目录,彻底避免历史文件残留,适合没有大体积本地依赖缓存的构建场景。
方案3:调整制品上传规则,仅上传本次生成的内容
你已经用时间戳生成独立的视频目录,可以配合TeamCity内置变量调整制品上传规则,仅同步本次构建生成的内容:
- 在构建中把本次生成视频的时间戳导出为TeamCity环境变量,比如命名为
REPORT_VIDEO_DIR - 将原制品规则
reports/**/*调整为:
reports/html/**/* => reports reports/%REPORT_VIDEO_DIR%/**/* => reports/%REPORT_VIDEO_DIR%
这样即使工作目录有历史视频目录,也不会被上传到制品中。
方案4:代理端全局配置构建前钩子(多项目通用场景)
如果多个项目都有类似的清理需求,可以在TeamCity代理侧配置全局前置脚本:
- 进入代理配置目录
/data/teamcity_agent/conf/ - 新建
pre-build.sh脚本,写入需要全局执行的清理命令,例如:
if [ -d "./reports" ]; then rm -rf ./reports; fi mkdir -p ./reports
- 给脚本添加执行权限:
chmod +x pre-build.sh
配置完成后所有在该代理上运行的构建,执行前都会自动清理reports目录。
内容的提问来源于stack exchange,提问作者flasher2085
相关产品推荐
相关产品推荐

