CI/CD
CI(持续集成)在每次合并前自动验证;CD(持续交付/部署)在验证通过后晋升产物到环境。目标:反馈快、失败可定位、发布可重复。
流水线阶段(参考模板)
| 阶段 | 典型任务 | 失败即阻塞 |
|---|---|---|
| 安装 | 锁定依赖、缓存 | 是 |
| 静态检查 | lint、format、类型检查 | 是 |
| 单元/组件测试 | 快测、覆盖率阈值(可选) | 是 |
| 构建 | 编译、打包、镜像 | 是 |
| 集成/契约 | DB 容器、Pact、OpenAPI diff | 是(有边界时) |
| 安全 | 依赖漏洞扫描、密钥扫描 | 视严重级 |
| 部署 | staging → 人工批准 → prod | 环境策略 |
原则:越早失败越便宜;分钟级反馈优于小时级夜间批跑。
质量门禁
| 门禁 | 说明 |
|---|---|
| 主分支保护 | 禁止直接 push;要求 PR + 状态检查 |
| 必需检查 | test, lint, build 名称与分支规则一致 |
| 覆盖率 | 不设虚荣 100%;关注关键包下降 |
| 契约 | 消费者 job 拉 provider 契约 |
| 产物不可变 | 同一 commit 构建同一 digest |
注意
仅部署不验证:上线脚本绿但无测试 = 手动 CD。至少保证合并前跑完核心测试。
环境与晋升
| 环境 | 用途 | 数据来源 |
|---|---|---|
| local | 开发 | 本地/种子 |
| preview | PR 预览 | 合成或脱敏快照 |
| staging | 发布前整体验证 | 脱敏生产子集 |
| production | 用户流量 | 生产 |
晋升规则示例:
main合并 → 自动 staging- tag
v*→ 生产(需 approval) - 数据库迁移:向前兼容一步(expand → deploy → contract)
部署策略
| 策略 | 适用 | 注意 |
|---|---|---|
| 滚动 | 无状态服务 | 就绪探针、maxUnavailable |
| 蓝绿 | 要快切换 | 双倍资源、会话粘滞 |
| 金丝雀 | 风险敏感 | 指标回滚自动化 |
可观测与回滚
- 发布关联:commit SHA、构建号、变更单
- 黄金信号:延迟、流量、错误、饱和度
- 回滚:上一镜像/构建重新部署;DB 回滚需提前设计(向前兼容迁移)
个人项目最小 CI(GitHub Actions 思路)
# 示意:on pull_request + push to main
# jobs: lint → test → build
仓库内保持单一 workflow 文件、缓存依赖、矩阵仅在有多个运行时版本时启用。