Docker KubernetesNotes

第 28 章:CI/CD

zjc 于 2026-01-28 发布

这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Kubernetes 上的 CI/CD 通常包括构建镜像、测试扫描、生成清单、GitOps 同步和发布验证。

28.1 流程

Git commit
  -> CI build
  -> unit test
  -> image build
  -> security scan
  -> push registry
  -> update manifest / GitOps repo
  -> CD sync
  -> health check

28.2 镜像构建

docker build \
  -t registry.example.com/shop/order-service:1.2.0 .

docker push registry.example.com/shop/order-service:1.2.0

CI 建议:

  1. 版号来自 Git tag 或 commit;
  2. 构建缓存;
  3. 测试通过才推送;
  4. 扫描阻断高危;
  5. 生成 SBOM;
  6. 记录来源。

28.3 Manifest 管理

原始清单:

kubectl apply -f deploy.yaml

多环境管理:

工具 特点
Helm 包模板和版本化
Kustomize 原生叠加
Argo CD GitOps 同步
Flux GitOps

Helm values:

image:
  repository: registry.example.com/shop/order-service
  tag: 1.2.0
replicas: 3
resources:
  limits:
    cpu: "1"
    memory: 1Gi

28.4 GitOps

Application repo:业务代码
Deployment repo:环境期望状态
Cluster controller:同步期望状态

原则:

  1. Git 是唯一入口;
  2. 环境分支或目录清晰;
  3. 状态漂移可发现;
  4. 审批流程可追溯;
  5. 回滚就是回退 Git 状态。

28.5 发布验证

自动检查:

  1. rollout 状态;
  2. Pod ready;
  3. HTTP 5xx;
  4. 核心指标;
  5. 日志错误;
  6. 合约测试;
  7. 冒烟测试。

失败动作可以是暂停、缩回或通知人工确认。

本章小结

CI/CD 的关键是不可变镜像、可追溯清单、环境隔离、自动验证和可回滚发布。GitOps 让集群状态有唯一可信来源。

思考题

  1. 为什么应用代码和部署仓库可以分离?
  2. Helm 和 Kustomize 如何选择?
  3. GitOps 回滚如何执行?
  4. 发布验证应包含哪些指标?
  5. 镜像扫描失败如何处理?