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,将「凌晨人肉盯发布」变为自动化闭环。