GitLab指定制品1天过期未自动删除,如何清理旧制品?
解决GitLab旧制品未自动删除的问题
为什么expire_in没生效?
你设置的expire_in: 1 day只会对设置之后新生成的制品生效,之前已经存在的旧制品(比如两个月前的)当时没有配置过期时间,所以不会被GitLab的自动清理任务处理,导致一直留存占用空间。
手动删除旧制品的方法
1. 单个流水线制品删除
进入项目的「CI/CD」→「流水线」,找到目标旧流水线,点击进入后切换到「制品」标签页,点击删除按钮即可。
2. 批量删除(适用于大量旧制品)
- UI批量操作:进入项目「设置」→「CI/CD」→「制品」页面,这里会列出所有留存的制品,勾选需要删除的条目,点击顶部的「删除选中」按钮即可批量删除。
- API批量操作(高效处理大量制品):
- 先创建一个拥有
api权限的个人访问令牌(在个人设置→访问令牌里生成)。 - 用脚本调用GitLab API批量获取并删除旧制品,示例脚本(需替换占位符):
注意:需要提前安装# 替换为你的GitLab实例地址、项目ID、访问令牌 GITLAB_URL="https://your-gitlab-instance.com" PROJECT_ID="123" PRIVATE_TOKEN="your-access-token" # 筛选超过30天的流水线(可根据需求调整天数) OLDER_THAN_DAYS=30 # 获取所有符合条件的流水线ID PIPELINE_IDS=$(curl -s --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/pipelines?updated_before=$(date -d "-$OLDER_THAN_DAYS days" +%Y-%m-%dT%H:%M:%SZ)" | jq -r '.[].id') # 遍历删除每个流水线的制品 for ID in $PIPELINE_IDS; do curl --request DELETE --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/pipelines/$ID/artifacts" donejq工具来解析JSON响应。
- 先创建一个拥有
确保后续制品自动清理
当前的.gitlab-ci.yml配置是正确的,新生成的制品会在1天后自动标记为过期,等待GitLab的定时清理任务(通常每日运行)删除。如果需要给已有的旧制品批量设置过期时间,也可以用API调用PUT /projects/:id/pipelines/:pipeline_id/artifacts来更新它们的过期时间。
内容的提问来源于stack exchange,提问作者Jaime Roman
相关产品推荐
相关产品推荐

