Jenkins中X天后自动删除旧HTML报告文件夹的实现方案
解决方案:清理Jenkins旧构建的HTML报告文件夹
针对你遇到的htmlpublisher插件不支持自动清理旧报告的问题,有两种高效的实现方式,都可以直接集成到你的流水线post阶段中:
方法1:直接用Shell脚本(无需额外插件,推荐)
这是最灵活且无需依赖插件的方案,利用Linux的find命令就能实现按天数清理目标文件夹。你可以在post块中添加一个sh步骤,指定要清理的路径和过期天数:
post { always { sh 'rm mochawesome-report/mochawesome.json' publishHTML (target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: "$WORKSPACE/mochawesome-report/", reportFiles: 'mochawesome.html', reportName: "Mochawesome Report" ]) // 清理超过7天的旧报告文件夹(可修改天数和路径) sh ''' # 定义目标根路径(可以用Jenkins环境变量替换硬编码路径) REPORT_ROOT="/var/jenkins_home/jobs/IDE/jobs/mosaiq-ide-application/branches/subtask-I.anjt14c4kifi.o-jenkins/builds" # 清理超过7天的htmlreports下的所有文件夹 find $REPORT_ROOT -type d -path "*/htmlreports/*" -mtime +7 -exec rm -rf {} \\; ''' cleanWs() } }
脚本说明:
-type d:只匹配文件夹-path "*/htmlreports/*":精准定位到每个构建下的htmlreports子文件夹-mtime +7:匹配最后修改时间超过7天的文件/文件夹(把7改成你需要的天数)-exec rm -rf {} \\;:执行删除操作(注意结尾的转义分号)
如果想让路径更通用,也可以用Jenkins内置环境变量替代硬编码路径,比如:
sh ''' REPORT_ROOT="${JENKINS_HOME}/jobs/${JOB_NAME}/builds" find $REPORT_ROOT -type d -path "*/htmlreports/*" -mtime +7 -exec rm -rf {} \\; '''
这样不管job名称或分支变化,路径都会自动适配。
方法2:使用Jenkins插件辅助
如果更倾向于用插件管理清理任务,可以试试Build Cleanup Plugin:
- 安装插件后,在job的配置页面找到「Build Cleanup」选项
- 可以设置「Discard old builds」的规则,同时勾选「Delete build artifacts」,并指定要清理的路径模式(比如
**/htmlreports/*) - 不过这种方式是全局或job级别的配置,不像shell脚本那样能精准控制在
post阶段执行,但胜在可视化配置,无需写代码。
注意事项:
- 确保Jenkins运行用户(通常是
jenkins用户)对REPORT_ROOT路径有读写权限,否则删除操作会失败 - 测试脚本时可以先把
rm -rf换成echo,确认匹配到的文件夹是你想要删除的,避免误删
内容的提问来源于stack exchange,提问作者Ankit Koirala
相关产品推荐
相关产品推荐

