如何在一定时间后自动删除gitlab作业日志?

How to delete gitlab job logs automatically after certain time?

在我的 git 回购作业日志中消耗了大量 space,我必须每周使用 curl 手动删除作业以删除相关日志。

我浏览了几篇文章,得出的结论是:

  1. 我们无法在一段时间后自动删除 Gitlab 作业或管道,这只能通过 UI 或使用 Curl 进行手动处理。

  2. 我们可以使用 expire_in.

    删除工件

但是有没有什么方法可以像我们对工件所做的那样,以某种自动化的方式在 Gitlab 中删除或使管道和作业日志过期?

这在 GitLab.com 上是不可能的,因为 stated in the documentation:

There isn’t a way to automatically expire old job logs

Self-hosted 但是,GitLab 管理员确实可以选择简单地从文件系统(或远程存储,如果已配置)中删除日志文件。这可以在 cronjob 中设置,例如:

find /var/opt/gitlab/gitlab-rails/shared/artifacts -name "job.log" -mtime +60 -delete

另一种方法(适用于 gitlab.com 或 self-hosted)是设置一些使用 GitLab API 的自动化脚本(可能作为预定的 GitLab 管道?)找到旧管道并删除它们。

伪代码:

def get_all_projects() -> List[Project]:
    # https://docs.gitlab.com/ee/api/projects.html#list-all-projects
    ...

def get_project_pipelines(project: Project) -> List[Pipeline]:
    # https://docs.gitlab.com/ee/api/pipelines.html#list-project-pipelines
    # https://docs.gitlab.com/ee/api/pipelines.html#get-a-single-pipeline
    ...

today = datetime.today()
threshold = today - timedelta(days=60)
for project in get_all_projects():
    for pipeline in get_project_pipelines(project):
        if pipeline.finished_at < threshold:
            print('deleting', pipeline.id, 'from project', project.id)
            pipeline.delete()

您可以运行按计划(例如,在计划的管道本身中?)这样的脚本来定期删除旧管道。