CI/CD 可观测闭环:构建、部署、灰度与回滚全链路实践

2026-06-12 14:22:53
# CI/CD 可观测闭环实战 > 目标:发布过程可追踪、可验证、可自动回滚 ## 一、闭环架构 ``` Code Push → CI(构建/测试/扫描)→ 镜像仓库 → CD(Argo/Flux) → Staging 验证 → 生产灰度 → 指标验收 → 全量 / 回滚 ↑___________________________________| 可观测反馈 ``` --- ## 二、CI 流水线设计 ### 2.1 阶段划分 | Stage | 内容 | 时长目标 | |-------|------|----------| | lint | 代码规范 | < 2min | | test | 单测 + 集成测 | < 10min | | build | 镜像构建 | < 5min | | scan | Trivy/Snyk | < 3min | | push | 推 Harbor | < 2min | ### 2.2 GitLab CI 示例 ```yaml stages: [lint, test, build, deploy] test: stage: test script: - mvn -B verify coverage: '/Total.*?([0-9]{1,3})%/' build: stage: build script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - trivy image --exit-code 1 --severity CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA ``` **原则**:`main` 分支 CI 失败禁止合并(Merge Queue 前置)。 --- ## 三、CD:Argo CD 声明式部署 ```yaml # application.yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: order-service spec: source: repoURL: https://git.example.com/k8s-manifests path: order-service/overlays/production destination: server: https://kubernetes.default.svc namespace: production syncPolicy: automated: prune: true selfHeal: true ``` Kustomize overlay 管理 dev/staging/prod 差异。 --- ## 四、灰度策略 ### 4.1 金丝雀(推荐) ```yaml # Flagger 或 Argo Rollouts strategy: canary: steps: - setWeight: 10 - pause: {duration: 5m} - setWeight: 50 - pause: {duration: 10m} - setWeight: 100 ``` ### 4.2 指标驱动 promotion Prometheus 查询发布前后 5 分钟: - 错误率增幅 < 0.5% - P99 延迟增幅 < 20% - 业务成功率不降 不满足 → **自动回滚**上一 ReplicaSet。 --- ## 五、发布可观测 ### 5.1 部署事件关联 Trace 部署时打 tag:`deployment.version=v1.2.3`,Grafana 标注线对齐。 ### 5.2 核心看板 | 面板 | 查询 | |------|------| | 错误率 | `rate(http_requests_total{status=~"5.."}[5m])` | | P99 | `histogram_quantile(0.99, ...)` | | Pod 重启 | `kube_pod_container_status_restarts_total` | ### 5.3 SLO Burn Rate 告警 99.9% 可用 SLO,5min 错误预算消耗 > 2% → 暂停发布 pipeline。 --- ## 六、回滚 Runbook **自动回滚触发**:Canary 分析失败 **手动回滚**: ```bash kubectl argo rollouts undo order-service -n production # 或 argocd app rollback order-service ``` 回滚后 **15 分钟内禁止再次发布**,先 RCA。 --- ## 七、环境晋升 ``` dev(自动)→ staging(自动 + E2E)→ prod(人工 Approve + 灰度) ``` Staging 与 Prod **镜像 digest 一致**,仅配置 overlay 不同。 --- ## 八、Checklist - [ ] 镜像 tag 用 Git SHA,不用 `latest` - [ ] SBOM 生成并归档 - [ ] 密钥来自 External Secrets Operator - [ ] 发布后 30min 值班观察 - [ ] 变更单与 MR 关联 --- ## 小结 CI/CD 的成熟度体现在 **发布是否可观测、可验证、可回滚**。国内 2026 年一线团队普遍采用 Argo Rollouts + Prometheus 分析 gates,将「凌晨人肉盯发布」变为自动化闭环。