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

时间:2016-03-15 01:20:33

标签: gitlab gitlab-ci gitlab-omnibus

美好的一天,

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

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

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

我有三个问题:

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

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

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

  4. 任何链接,提示或建议都将受到高度赞赏!

    亲切的问候,

    [更新]更多阅读,得出以下结论:

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

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

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

3 个答案:

答案 0 :(得分:5)

我很想找到1&的答案。 2也是。

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

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

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

答案 1 :(得分:1)

正如我的问题所提到的,Gitlab 8.7可能会在某个时候更好地支持管理工件。请参阅Marco van Neerbos先前的回答,了解如何从备份中删除工件。

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

  1. 升级到Gitlab 8.5,这将允许您手动删除单个构建(您仍需要跟踪它们,然后单击“删除”按钮)。
  2. 根据Gitlab CE Issue 5572修改了修补程序,如果您知道组和项目名称,请使用以下命令进行批量删除(和数据库更新):
  3.   

    $ 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_*命令将返回nil,但如果您检查磁盘,文件将会消失,并从相关的构建页面中删除链接。

    1. 目前,我找不到任何关于将任何工件相关函数限制为工件的特定类型/类/目标的信息。

答案 2 :(得分:1)

您可以从文件系统中删除旧工件。但是,如果您尝试使用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