如何在自托管Gitlab中自动清理旧artifacts解决存储空间不足问题
方案1:启用Gitlab内置过期Artifacts清理任务
你在管理后台配置的过期规则未自动触发物理删除,是因为对应后台清理任务的默认执行频率较低,可通过以下配置调整:
- 先手动验证清理逻辑是否正常,执行命令:
gitlab-rake gitlab:cleanup:expired_artifacts,该命令会自动扫描所有已标记为过期的artifacts,直接清理对应的磁盘文件,不会误删未过期资源 - 调整自动执行频率:打开Gitlab主配置文件
/etc/gitlab/gitlab.rb,修改如下配置项(示例为每2小时执行一次,可根据业务需求调整间隔):
gitlab_rails['expire_build_artifacts_worker_cron'] = "0 */2 * * *"
- 修改完成后执行
gitlab-ctl reconfigure即可生效,该方案完全适配Gitlab自身的过期规则,无需维护额外路径,风险更低。
方案2:自定义定时脚本清理(适配自定义清理规则场景)
如果你需要额外清理超过特定期限的artifacts(比如你需求的7天阈值),可以通过定时脚本实现:
- 首先确认你的artifacts存储路径,默认路径为
/var/opt/gitlab/gitlab-rails/shared/artifacts,如果你手动修改过存储路径,替换为实际路径即可 - 编写清理脚本,比如存为
/opt/scripts/clean_old_artifacts.sh,内容如下:
#!/bin/bash # 先清理磁盘上创建时间超过7天的artifacts目录 find /var/opt/gitlab/gitlab-rails/shared/artifacts -type d -ctime +7 -exec rm -rf {} \; # 同步清理Gitlab数据库中已被物理删除的artifacts元数据,避免页面残留无效记录 gitlab-rake gitlab:cleanup:orphan_artifacts
- 给脚本添加执行权限:
chmod +x /opt/scripts/clean_old_artifacts.sh - 配置定时执行规则,执行
crontab -e添加如下配置(示例为每天凌晨2点执行,避开业务高峰):
0 2 * * * /opt/scripts/clean_old_artifacts.sh >> /var/log/clean_old_artifacts.log 2>&1
注意:首次执行脚本前建议先将
rm -rf替换为ls,验证输出的待清理目录符合预期后再替换为删除命令,避免误删业务资源。
内容的提问来源于stack exchange,提问作者mikita agrawal
相关产品推荐
相关产品推荐

