7.2 KiB
7.2 KiB
tags, create time
| tags | create time | |||||||
|---|---|---|---|---|---|---|---|---|
|
2026-05-05 14:30 |
CI/CD 与 GitOps — 参考手册
概述
微服务架构下的自动化交付体系。一次构建,多处部署是核心哲学——镜像不随环境重新编译,只改 K8s ConfigMap。本文档是总入口:顶层概念、决策矩阵、速查表见本页;详细教程和实操指南在子文档中。
快速导航
| 主题 | 定位 | 文档 |
|---|---|---|
| Pipeline 搭建 | 教程:从 0 到 1 写出一个能跑的流水线 | 03-CICD与GitOps/01-CICD基础与实践 |
| GitOps & ArgoCD | 教程:Push → Pull 架构迁移、Application CRD | 03-CICD与GitOps/02-GitOps与ArgoCD |
| Helm 模板 | 操作手册:values.yaml、Go 模板、多环境覆盖 | 03-CICD与GitOps/03-Helm模板管理 |
| 安全 & 发布策略 | 决策指南:Secret 选型、Canary vs Blue-Green | 03-CICD与GitOps/04-安全与发布策略 |
架构全景
flowchart LR
Dev["开发者 push"] --> CI["GitHub Actions\n(CI: 测试→构建→Push镜像)"]
CI -->|"新镜像"| REG["Container Registry"]
Dev2["开发者 PR manifest"] --> MANIFEST["Git Manifest Repo"]
subgraph Cluster["K8s Cluster"]
Argo["ArgoCD"] -->|"自动同步"| WORKLOADS["Pod / Service / ..."]
end
MANIFEST -.->|Watch 变动| Argo
style CI fill:#e8f5e9
style Argo fill:#fff3e0
style WORKLOADS fill:#e3f2fd
核心分工:CI/CD 管"怎么建"(构建、扫描、推送镜像),GitOps 管"怎么维持"(Git 声明 → 集群自动同步)。
标签策略速查
| Tag | 示例 | 用途 | 安全性 |
|---|---|---|---|
latest |
nginx:latest |
❌ 开发调试 | ❌ 可被覆盖,不可回滚 |
| 语义版本 | v1.2.3 |
✅ 人类阅读、快速参考 | ⚠️ 仍可被更新覆盖 |
| Commit SHA | sha256:a1b2c3d |
✅ 机器精确引用、精确回滚 | ✅ 全局唯一、不可变 |
| Run Number | v123 |
✅ GitHub Actions 快速参考 | ⚠️ 单次 workflow 内唯一 |
推荐:同时打
sha256:{commit}+v{run_number}。生产回滚优先用 Commit SHA。
Pipeline 阶段对照
| 阶段 | 做什么 | 工具举例 | 详见 |
|---|---|---|---|
| 触发过滤 | 只对相关代码变更构建 | paths, pull_request |
03-CICD与GitOps/01-CICD基础与实践 |
| 测试 | 单元测试 + 集成测试 | Jest, pytest, go test | 03-CICD与GitOps/01-CICD基础与实践 |
| 安全扫描 | 镜像/依赖漏洞检测 | Trivy, Snyk | 03-CICD与GitOps/04-安全与发布策略 |
| 构建+推送 | Docker image 构建并推仓库 | docker build/push | 03-CICD与GitOps/01-CICD基础与实践 |
| Staging 验证 | 预发布环境冒烟测试 | kubectl set image | 03-CICD与GitOps/01-CICD基础与实践 |
| Production | 灰度放量,人工审批关卡 | Canary, Blue-Green | 03-CICD与GitOps/04-安全与发布策略 |
部署驱动模式对比
| 维度 | 传统 CI/CD (Push) | GitOps (Pull) |
|---|---|---|
| 部署驱动 | CI 服务器主动推送 | Git 仓库变动触发拉取 |
| 状态源 | CI pipeline 历史 | Git commit history |
| 漂移检测 | 通常无 | 持续比对,自动修复 |
| 安全边界 | CI 需直连 K8s | ArgoCD 集群内运行 |
| 回滚方式 | 回到上一次的 pipeline | git revert + 自动同步 |
| 代表工具 | Jenkins, GitHub Actions | ArgoCD, Flux |
选型建议:团队规模 < 20 人时 Push 模式足够。≥ 50 人或多环境场景建议迁移到 GitOps。
Secret 管理方案对比
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| K8s 原生 Secret | 小规模内部团队 | 零成本,开箱即用 | etcd 明文存储 |
| ESO (External Secrets) | 已有 Vault / AWS SSM | Git 中无密文 | 需维护额外组件 |
| SOPS + sealed-secrets | ArgoCD 用户 | 加密文件可提交到 Git | 需管理 PKI |
| 云厂商 Secret Manager | 深度绑定单一云平台 | 审计完善 | 平台锁定 |
渐进路径:K8s Secret → 接入云厂商 Secret Manager → 引入 ESO 实现多云解耦。
发布策略对比
| 维度 | Rolling Update | Canary | Blue-Green | Experiment |
|---|---|---|---|---|
| 停机时间 | 可能有抖动 | 零 | 零 | 零 |
| 复杂度 | 低 | 中 | 中高 | 高 |
| 资源消耗 | 1x | 1.5x | 2x | 2x+ |
| 回滚速度 | 慢(完整重建) | 快(切流量) | 秒级 | 秒级 |
| 典型场景 | 内部服务 | 用户-facing | 重要版本 | A/B 测试 |
编排工具选型
| 服务规模 | 推荐方案 | 理由 |
|---|---|---|
| < 10 个服务 | Kustomize / 裸 YAML | 复杂度高于收益 |
| 10~50 个服务 | Helm | 模板复用价值明显 |
| > 50 个服务 | Helm + Kustomize overlays | Helm 管模板,Kustomize 管环境差异 |
关键决策流程图
Secret 选型决策
flowchart TD
START["开始选型"] --> SIZE["团队 < 20人?"]
SIZE -- 是 --> K8SSECRET["✅ K8s 原生 Secret"]
SIZE -- 否 --> CLOUD["深度绑定云厂商?"]
CLOUD -- 是 --> SECRETMGR["✅ Cloud Secret Manager"]
CLOUD -- 否 --> GITOPS["使用 ArgoCD?"]
GITOPS -- 是 --> SOPS["✅ SOPS + sealed-secrets"]
GITOPS -- 否 --> ESO["✅ External Secrets Operator"]
style K8SSECRET fill:#e8f5e9
style SECRETMGR fill:#e3f2fd
style SOPS fill:#fff3e0
style ESO fill:#f3e5f5
渐进式采纳路径
flowchart LR
STEP1[("1. 自动化构建+Push")] --> STEP2[("2. Staging + 审批")] --> STEP3[("3. GitOps, Git 即真相源")]
style STEP1 fill:#e8f5e9
style STEP2 fill:#fff3e0
style STEP3 fill:#e3f2fd
附录:常用命令速查
GitHub Actions
# 查看 workflow 运行记录
gh run list --workflow deploy.yml
# 手动触发 workflow
gh workflow run deploy.yml --ref main
kubectl
# 滚动更新指定镜像
kubectl set image deployment/order-service \
order=registry.example.com/order-service:v1.2.3 -n production
# 查看 rollout 状态
kubectl rollout status deployment/order-service -n production --timeout=120s
# 回滚到上一版本
kubectl rollout undo deployment/order-service -n production
ArgoCD CLI
argocd app sync order-service # 手动同步
argocd app diff order-service # Git vs 实际差异
argocd app history order-service # 同步历史
argocd app rollback order-service # 回滚
Helm
helm upgrade --install order-service ./charts/order-service -n production
helm upgrade --install order-service ./charts/order-service -n staging --set image.tag=v1.2.4-dev
helm template order-service ./charts/order-service # 仅渲染,不安装
helm history order-service -n production # Release 历史
关联笔记
- 01-容器化 — Docker 镜像构建是 CI/CD 的第一步
- 02-Kubernetes — K8s 是部署的目标平台
- 04-SRE实践 — 错误预算影响发布策略
- 05-监控告警 — Prometheus + Alertmanager 为 Canary 提供指标支撑