美好的一天,
我为我的公司运行GitLab CE Omnibus(8.4.3)安装。我们最近开始使用CI,但仍主要用于生成文档。二进制构建正在被添加。
作为系统的一部分,我运行每日备份任务(使用gitlab-rake gitlab:backup:create
)。在过去的几天里,这些工件已经开始变得非常大,即使它只是在这个阶段的文档(doxygen生成的图像似乎是问题的主要来源)。由于工件包含在备份中,因此每日备份(当前策略值2周)已变得难以处理。
我已经搜索了一些答案,但我得到的大多数点击似乎与此阶段的功能请求有关。我知道CI仍然是相对新的,但我认为工件管理在需求列表中相当高。
我有三个问题:
有没有办法在GitLab中管理/删除旧的工件,而不是手动将它们从磁盘中删除(并且可能会破坏流程中的链接)?如果这个过程可以自动化,那将是理想的。
从1开始,是否可以在清理策略中定位特定类别的工件(即,只删除较旧的文档目标,但不删除二进制文件等)?
是否可以完全或基于CI目标类型排除推荐的gitlab-rake gitlab:backup:create
备份过程中的工件?
任何链接,提示或建议都将受到高度赞赏!
亲切的问候,
[更新]更多阅读,得出以下结论:
从Gitlab 8.5开始,我可以手动删除单个构建工件。这有帮助,但不具备可扩展性。适当的工件管理(包括到期日期等)的时间表似乎是Gitlab 8.7。
似乎没有明确要求以不同方式处理不同的构建目标工件。
没有关于从备份任务中删除工件的信息。
答案 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先前的回答,了解如何从备份中删除工件。
目前,这些是管理现有工件的选项:
$ 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
,但如果您检查磁盘,文件将会消失,并从相关的构建页面中删除链接。
答案 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