第 11 章 · 镜像仓库与 CI/CD 全链路
本章将 代码提交 → 构建镜像 → 推送仓库 → 集群升级 串成可验收流水线。基于应用商店真实目录:Gitea / GitLab CE / Jenkins / Docker Registry。
前置:第 7 章 Jenkins、Gitea 基础;本章侧重 端到端联动。
11.1 CI/CD 架构
开发者 ──push──► Gitea/GitLab ──webhook──► Jenkins
│
docker build & push
▼
Docker Registry(:5000)
│
kubectl set image / 应用部署·升级
▼
app Namespace · Deployment
| 角色 | 商店 id | 端口 | 说明 |
|---|
| 代码仓 | gitea / gitlab-ce | 3000 / 80 | 轻量选 Gitea;要内置 CI 选 GitLab(资源高) |
| 流水线 | jenkins | 8080 | Pipeline / Jenkinsfile |
| 镜像仓 | docker-registry | 5000 | 官方 OCI 仓库,内网够用 |
| 仓 UI | registry-ui | 80 | 浏览镜像 tag |
| 企业仓 | harbor-portal | 8080 | 仅 core 镜像,需外接 MySQL+Redis,生产慎用单容器 |
11.2 Docker Registry 2.8(推荐内网镜像仓)
适用场景
| 选用 | 说明 |
|---|
| 内网私有镜像存储 | Jenkins 构建后 docker push |
| 小团队 / 演示环境 | 单容器 + PVC 即可 |
| 与 K8s 拉取 | 节点配置 insecure-registry 或使用 HTTPS |
商店部署参数
| 项 | 值 |
|---|
| id | docker-registry |
| 镜像 | registry:2.8 |
| 端口 | 5000 |
| PVC | 50 Gi → /var/lib/registry |
| Namespace | devops |
环境变量
env:
- name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
value: /var/lib/registry
# 可选:删除接口开启(仅内网)
- name: REGISTRY_STORAGE_DELETE_ENABLED
value: "true"
连接语法
| 操作 | 命令 |
|---|
| 推送 | docker tag api:1.0 <节点IP>:<NodePort>/shop/api:1.0 → docker push ... |
| 拉取 | docker pull <节点IP>:<NodePort>/shop/api:1.0 |
| K8s 镜像 | image: <节点IP>:<NodePort>/shop/api:1.0 |
HTTP 仓库需在 构建节点 与 集群节点 的 /etc/docker/daemon.json 配置 "insecure-registries": ["<IP>:5000"] 后重启 Docker。
Registry UI
| 项 | 值 |
|---|
| id | registry-ui |
| 镜像 | joxit/docker-registry-ui:2.5.7 |
| env | REGISTRY_URL=http://docker-registry.devops.svc.cluster.local:5000 |
浏览器浏览 shop/api 下所有 tag。
11.3 Harbor(harbor-portal)说明
商店卡片描述:企业级容器镜像仓库(需配合外部 DB/Redis)。
| 项 | 值 |
|---|
| id | harbor-portal |
| 镜像 | goharbor/harbor-core:v2.11.0 |
| 端口 | 8080 |
事实说明:完整 Harbor 含 core、registry、jobservice、portal、DB、Redis 等多组件。商店单容器 不适合直接当生产 Harbor。
| 场景 | 建议 |
|---|
| 学习 / 演示 | 用 Docker Registry + Registry UI |
| 企业级需求 | 外接第 2 章 MySQL + 第 3 章 Redis,按 Harbor 官方文档补全多组件;或评估 Artifactory OSS(artifactory-oss,端口 8081) |
11.4 GitLab CE 17.1(一体化 DevOps)
商店部署参数
| 项 | 值 |
|---|
| id | gitlab-ce |
| 镜像 | gitlab/gitlab-ce:17.1.0-ce.0 |
| 端口 | 80(HTTPS 443 需在端口弹窗补充) |
| PVC | 50 Gi → /var/opt/gitlab |
| 资源 | 大型 · 4 核 8Gi+ |
环境变量(可选)
env:
- name: GITLAB_OMNIBUS_CONFIG
value: |
external_url 'http://gitlab.devops.svc.cluster.local'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
首次使用
- NodePort 访问 → 设置 root 密码
- 新建 Group / Project → 推送代码
- Settings → CI/CD → Runners 注册 Runner(或继续用 Jenkins)
.gitlab-ci.yml 示例