在 GitLab CE Omnibus 中管理(较旧的)CI 工件

Managing (older) CI artifacts in GitLab CE Omnibus

大家好,

我 运行 我公司的 GitLab CE Omnibus (8.4.3) 安装。我们最近开始使用 CI,但仍主要用于生成文档。正在添加二进制构建。

作为系统的一部分,我运行一个每日备份任务(使用gitlab-rake gitlab:backup:create)。在过去的几天里,这些工件开始变得非常大,即使在这个阶段它只是文档(doxygen 生成的图像似乎是问题的主要来源)。由于工件包含在备份中,每日备份(当前策略保持 2 周的价值)变得笨重。

我搜索了一些答案,但我得到的大多数结果似乎都与现阶段的功能请求有关。我知道 CI 仍然是 相对 新的,但我认为工件管理在需求列表中的位置相当高。

我有三个问题:

  1. 有没有办法 manage/delete GitLab 中的旧工件,而不是手动将它们从磁盘中删除(并且可能在此过程中破坏链接)?如果这个过程可以自动化,那就太理想了。

  2. 从 1 开始,是否可以在清理策略中针对特定的 类 工件(即只删除旧的文档目标,但不删除二进制文件等)?

  3. 是否可以完全或基于 CI 目标类型,从推荐的 gitlab-rake gitlab:backup:create 备份过程中排除工件?

任何链接、提示或建议将不胜感激!

亲切的问候,

[更新]更多阅读,产生以下内容:

  1. 从 Gitlab 8.5 开始,我可以手动删除单个构建工件。这有帮助,但不可扩展。适当的工件管理(包括有效期等)的时间表似乎是 Gitlab 8.7。

  2. 似乎还没有明确要求以不同的方式处理不同的构建目标工件。

  3. 没有关于从备份任务中删除工件的信息。

我也很想找出 1 和 2 的答案。

要排除备份任务中的项目,请尝试使用 SKIP 参数:

gitlab-rake gitlab:backup:create SKIP=artifacts,builds

您还可以跳过存储库、lfs、上传。只需将它们作为逗号分隔列表提供。另见 https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/backup_restore.md

正如我在问题中提到的,对管理工件的更好支持可能会在 Gitlab 8.7 左右的某个时候出现。请参阅 Marco van Neerbos 之前关于从备份中删除工件的回答。

目前,这些是管理现有工件的选项:

  1. 升级到 Gitlab 8.5,这将允许您手动删除单个构建(您仍然需要跟踪它们,然后单击 'Erase' 按钮)。
  2. 改编自 Gitlab CE Issue 5572 修复,如果您知道组和项目名称,请使用以下内容进行批量擦除(和数据库更新):

$ sudo gitlab-rails console
> p = Project.find_with_namespace("group/project")
> p.builds.where.not(artifacts_file: nil).find_each(&:remove_artifacts_file!)
> p.builds.where.not(artifacts_metadata: nil).find_each(&:remove_artifacts_metadata!)

remove_* 命令将 return nil,但如果您检查磁盘,文件将会消失,相关构建页面中的链接将被删除。

  1. 目前,我找不到关于将任何工件相关功能限制为特定 types/classes/targets 工件的信息。

您可以从文件系统中删除旧工件。但是,如果您尝试使用 GitLab UI 下载它们,这将导致 404 错误。就我而言,没人在乎。

sudo du -hd 1 /var/opt/gitlab/gitlab-rails/shared/artifacts
sudo rm -rf /var/opt/gitlab/gitlab-rails/shared/artifacts/[whatever you can spare]

另见 https://docs.gitlab.com/omnibus/settings/configuration.html#disable-storage-directories-management