You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab指定制品1天过期未自动删除,如何清理旧制品?

解决GitLab旧制品未自动删除的问题

为什么expire_in没生效?

你设置的expire_in: 1 day只会对设置之后新生成的制品生效,之前已经存在的旧制品(比如两个月前的)当时没有配置过期时间,所以不会被GitLab的自动清理任务处理,导致一直留存占用空间。

手动删除旧制品的方法

1. 单个流水线制品删除

进入项目的「CI/CD」→「流水线」,找到目标旧流水线,点击进入后切换到「制品」标签页,点击删除按钮即可。

2. 批量删除(适用于大量旧制品)

  • UI批量操作:进入项目「设置」→「CI/CD」→「制品」页面,这里会列出所有留存的制品,勾选需要删除的条目,点击顶部的「删除选中」按钮即可批量删除。
  • API批量操作(高效处理大量制品):
    1. 先创建一个拥有api权限的个人访问令牌(在个人设置→访问令牌里生成)。
    2. 用脚本调用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"
      done
      
      注意:需要提前安装jq工具来解析JSON响应。

确保后续制品自动清理

当前的.gitlab-ci.yml配置是正确的,新生成的制品会在1天后自动标记为过期,等待GitLab的定时清理任务(通常每日运行)删除。如果需要给已有的旧制品批量设置过期时间,也可以用API调用PUT /projects/:id/pipelines/:pipeline_id/artifacts来更新它们的过期时间。

内容的提问来源于stack exchange,提问作者Jaime Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:25:21