首页 新闻 会员 周边

如何删除 GitLab 中所有项目的 CI artifacts

0
悬赏园豆:30 [待解决问题]

在备份 gitlab 时发现备份 artifacts 竟然耗时近18分钟

2026-10-31 13:07:50 +0800 -- Dumping artifacts ... 
2026-10-31 13:25:12 +0800 -- Dumping artifacts ... done

请问如何删除 GitLab 中所有项目的 artifacts?

dudu的主页 dudu | 高人七级 | 园豆:22661
提问于:2026-10-31 13:44
< >
分享
所有回答(1)
0

from copilot GPT-6 Astra:

清理自建 GitLab 中所有项目的 Job artifacts

自建 GitLab、有服务器管理权限时,建议通过 Rails 控制台批量清理,不要直接删除 artifacts 目录或数据库记录。

⚠️ 此操作不可恢复,会删除所有项目的 Job artifacts,包括构建产物、报告,以及被保留的最新流水线产物。

保留代码仓库、流水线记录和 Job 日志。

执行前请做好备份,暂停新流水线,并等待运行中的任务结束。

1. 进入 Rails 控制台

安装包部署

在 GitLab 服务器执行:

sudo gitlab-rails console

官方 Docker 部署

假设容器名为 gitlab,请按实际名称替换:

docker exec -it gitlab gitlab-rails console

2. 统计待删除记录

以下使用当前 GitLab 的内部接口;旧版本应先核对对应版本文档,不要直接照搬。

在 Rails 控制台执行,查看待删除的 artifact 记录数,不包含 Job 日志:

Ci::JobArtifact.erasable.count

3. 分批删除所有项目的 artifacts

确认备份和删除范围后,在 Rails 控制台执行:

Ci::Build.with_erasable_artifacts.each_batch(of: 100) do |batch|
  batch.each do |build|
    result = Ci::JobArtifacts::DeleteService.new(build).execute
    raise "Job #{build.id}: #{result.message}" if result.error?

    puts "已清理 Job #{build.id}"
  end
end

此操作不限制创建时间,也覆盖只有报告、没有普通压缩包的任务。

如执行中途报错,应先排查原因;此前已成功删除的 artifacts 不会自动恢复。

4. 检查剩余记录

Ci::JobArtifact.erasable.count

没有新任务写入的情况下,应为 0。

退出控制台:

exit

5. 注意事项

磁盘空间可能不会立即释放

较新版本会交给后台任务删除实际文件,需确保 Sidekiq 正常运行。大量文件的物理清理可能耗时很久。

记录数归零,不代表磁盘上的文件已经全部清理完毕。

项目批量 API 不等于彻底清空

DELETE /projects/:id/artifacts

此接口默认会保留部分最新流水线的 artifacts,不能仅遍历项目调用它就认定全部删完。

避免再次堆积

在管理员的 CI/CD 设置中:

  • 配置默认 artifacts 过期时间。
  • 必要时关闭保留最新成功流水线 artifacts 的选项。
  • 检查项目是否单独配置了过期时间或永久保留。

默认过期时间的修改只影响新产物,不会自动修改已有产物的过期时间。

官方文档

czd890 | 园豆:14860 (专家六级) | 2026-11-04 16:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册。