You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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阶段执行,但胜在可视化配置,无需写代码。

注意事项:

  1. 确保Jenkins运行用户(通常是jenkins用户)对REPORT_ROOT路径有读写权限,否则删除操作会失败
  2. 测试脚本时可以先把rm -rf换成echo,确认匹配到的文件夹是你想要删除的,避免误删

内容的提问来源于stack exchange,提问作者Ankit Koirala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:53