首页/开发/CI/CD 与发布速查/GitLab Container Registry
构建与制品管理58 条

GitLab Container Registry

项目自带的镜像仓库:镜像路径与项目对应,作业内用 CI_JOB_TOKEN 即可登录推送,支持清理策略控制空间。

CI/CD 与发布速查开发更新于 2026-10-13

GitLab Registry 是什么

项目自带的镜像仓库:镜像路径与项目一一对应,作业内用 CI_JOB_TOKEN 或受管的 CI_REGISTRY_USER 与 PASSWORD 即可登录推送,支持项目级清理策略按 tag 模式与保留数量控制空间占用。要管好两件事:标签规范(semver 与 sha)和垃圾回收节奏。

基本信息

路径registry.example.com/<group>/<project>[:tag]
认证$CI_REGISTRY_USER / $CI_REGISTRY_PASSWORD(受管令牌)或 CI_JOB_TOKEN
治理项目级 Cleanup policy(按 tag 模式与保留数量清理)
标签规范semver 与 sha 双轨,清理规则按命名模式匹配
空间回收删除与垃圾回收分开执行,按平台流程走

典型使用场景

  • 作业内构建推送:dind 服务里登录、构建、推送一条链
  • 版本管理:按 tag 推送发布镜像,按 sha 推送快照
  • 空间治理:按 tag 模式保留最近若干,其余定时清理
  • 构件复用:下游作业直接从本项目镜像仓库拉取
  • 多项目协作:按项目路径授权拉取而非共享账号

作业内推送

作业内推送
build:
  image: docker:27
  services: [docker:27-dind]
  script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG

常用变量

变量含义用途
CI_REGISTRY仓库地址登录目标
CI_REGISTRY_IMAGE当前项目镜像路径拼标签直接推送
CI_REGISTRY_USER受管推送账号配合密码登录
CI_JOB_TOKEN作业令牌作业内认证替代
清理策略基于 tag 命名模式:先规范标签(semver/sha),清理规则才能安全生效。
dind 需要特权配置;能用托管构建镜像时优先用,减少特权面。

实践要点

  • 标签双轨:semver 用于交付,sha 用于溯源
  • 最小权限:作业令牌只授予所需项目与动作
  • 迁移预案:自建迁移外部仓库时路径与凭证一起改
  • 镜像扫描:推送后接容器扫描,结果回写作业
  • 网络优化:自建实例的拉取走内网地址,减少出口流量
  • 体积控制:多阶段构建与精简基础镜像,缩短拉取时间
更换域名要三处同步:CI 变量、集群 imagePullSecrets 与本地脚本。
仓库成本三要素:保留策略、构建频率与镜像体积,一起治理。

易错点

  • 直接删 tag 不跑垃圾回收:底层 blob 仍占空间,按平台流程执行清理
  • 用个人令牌推送:人员离职即失效,改用作业令牌或部署令牌
  • 标签命名随意:清理策略无法用模式匹配,先立命名规范再上策略
  • 清理策略命中范围没核对:误删仍在服役的版本,先在预发项目演练规则
  • 所有项目共享一个推送账号:出事无法定位来源,按项目分令牌
  • 忽略构建缓存层:缓存占用持续增长,纳入清理策略与容量监控

数据来源与参考

  • GitLab Docs《Container Registry》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌