GitLab CI 清理需精准移除无引用资源:一清理 Runner 残留容器;二清理 dangling 和未引用镜像;三清理 GitLab 服务端 artifacts、cache 和 dependency proxy;四通过策略或 API 清理 Container Registry 标签。

GitLab CI 运行过程中会生成大量临时容器、构建镜像和制品文件,若不及时清理,容易导致磁盘空间告急、构建变慢甚至失败。清理重点不是“全删”,而是精准识别并移除无引用的残留资源,避免误伤业务数据或正在运行的流水线。
一、清理 GitLab Runner 本地残留容器
GitLab Runner(尤其是 shell 或 docker executor)执行完 job 后,有时会遗留已退出但未自动清理的容器,尤其在非 privileged 模式或异常中断时。查看所有已停止但未删除的容器:
docker ps -a --filter "status=exited" --format "{{.ID}} {{.Names}} {{.Image}}" | grep gitlab-
安全清理原则:只删明确由 GitLab Runner 创建、且状态为
exited或created的容器
✅ 推荐命令(带过滤,避免误删):docker rm $(docker ps -a -q --filter "status=exited" --filter "ancestor=gitlab/gitlab-runner")
⚠️ 注意:不要用
docker container prune -f全局清理,可能误删其他服务容器。 若使用
dockerexecutor 且启用了pull_policy = "if-not-present",还需定期清理未被引用的中间构建镜像(见下文)。
二、清理无用的构建镜像(Docker 层与 dangling 镜像)
CI 构建过程(尤其是多阶段 Dockerfile)会产生大量中间层镜像;tag 覆盖后旧镜像失去标签,变成 `列出所有悬空镜像(即无标签、无容器引用的中间层):
docker images --filter "dangling=true" -a
Github Stars Analyzer下载抓取指定 GitHub用户的 Stars 项目,生成标准化中文 Markdown 报告。用户提及「分析 GitHub stars」「导出收藏项目」「汇总 GitHub 星标」「生成 stars 报告」或粘贴含 ?tab=stars 的链接时触发。执行通过 bash...
安全清理(推荐每日或每次大构建后执行):
docker image prune -f
此命令只删 dangling 镜像,不影响任何有标签或正被容器使用的镜像。如需更激进清理(例如保留最近 7 天内使用的镜像):
docker image prune -a -f --filter "until=168h"
⚠️ 注意:-a会删掉所有未被容器引用的有标签镜像,务必确认无长期离线任务依赖这些镜像。
三、清理 GitLab 自身的 CI/CD 临时制品(最安全、见效最快)
GitLab 服务端存储的 artifacts(如测试报告、打包产物)、cache、dependency proxy 缓存等,是磁盘占用主力,且**完全可安全清理**——它们不关联代码仓库或数据库。-
清理孤儿制品(推荐所有人必做):
- 先预览(不删):
sudo gitlab-rake gitlab:cleanup:orphan_job_artifacts DRY_RUN=true - 确认无误后执行:
sudo gitlab-rake gitlab:cleanup:orphan_job_artifacts DRY_RUN=false
- 先预览(不删):
清理过期 CI cache(默认保留 7 天,可调):
GitLab 会自动清理,但若自定义了超长 TTL,可手动触发:sudo gitlab-rake gitlab:cleanup:expired_job_cache清理 Dependency Proxy 缓存(如拉取的 Maven/NPM 包):
sudo gitlab-rake gitlab:cleanup:dependency_proxy_blobs
四、容器注册表(Container Registry)镜像标签清理
如果你启用了 GitLab Container Registry 并频繁推送 CI 构建镜像(如 `registry.example.com/group/project:ci-123`),旧 tag 会持续堆积。启用自动清理策略(GitLab 14.1+ 支持):
在项目 Settings → Packages & Registries → Container Registry → Tag expiration policy 中设置规则,例如:^main-.*→ 保留 30 天^feature-.*→ 保留 7 天.*→ 删除未匹配的所有 tag(慎用)手动清理单个项目旧 tag(需管理员权限):
使用 GitLab API 或 Admin Area → Overview → Projects → 进入项目 → Settings → CI/CD → Container Registry → 点击 tag 右侧垃圾桶图标批量删除。不建议直接操作
/var/opt/gitlab/registry目录——Registry 使用自管理存储结构,手动删文件易损坏索引。
不复杂但容易忽略

















