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 与本地脚本。
仓库成本三要素:保留策略、构建频率与镜像体积,一起治理。