如何在一定时间后自动删除gitlab作业日志?
How to delete gitlab job logs automatically after certain time?
在我的 git 回购作业日志中消耗了大量 space,我必须每周使用 curl 手动删除作业以删除相关日志。
我浏览了几篇文章,得出的结论是:
我们无法在一段时间后自动删除 Gitlab 作业或管道,这只能通过 UI 或使用 Curl 进行手动处理。
我们可以使用 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()
您可以运行按计划(例如,在计划的管道本身中?)这样的脚本来定期删除旧管道。
在我的 git 回购作业日志中消耗了大量 space,我必须每周使用 curl 手动删除作业以删除相关日志。
我浏览了几篇文章,得出的结论是:
我们无法在一段时间后自动删除 Gitlab 作业或管道,这只能通过 UI 或使用 Curl 进行手动处理。
我们可以使用
删除工件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()
您可以运行按计划(例如,在计划的管道本身中?)这样的脚本来定期删除旧管道。