CI/CD 流水线设计

2026-06-22 · 6 阅读 · 333字
CI/CDGit

CI/CD 流水线设计

概述

CI/CD(持续集成/持续部署)流水线是现代软件工程的核心基础设施。它将代码从提交到部署的整个过程自动化,确保每次变更都经过一致的构建、测试和部署流程。

流水线阶段

1. 代码提交与触发

流水线由代码仓库的事件触发:

常用触发条件:
- push:     分支推送(如 main、develop)
- pull_request:   PR 创建或更新
- tags:     标签推送(如 v1.2.3)
- schedule: 定时触发

2. 代码检查

在构建之前进行静态分析:

  • Lint 检查:eslint、pylint、golint
  • 代码格式化:prettier、black、gofmt
  • 类型检查:TypeScript、mypy
  • 安全扫描:代码依赖漏洞检查

3. 构建阶段

构建产出:
  语言类: 编译产物、打包产物
  容器类: Docker 镜像
  文档类: API 文档、组件文档

最佳实践:
  - 多阶段构建减小产物体积
  - 构建产物缓存以加速后续构建
  - 为构建产物生成唯一标识(如 commit SHA)

4. 测试阶段

测试金字塔自底向上:

单元测试:     快速反馈,覆盖业务逻辑
  覆盖率要求: >80%
  执行时间: <30秒

集成测试:     验证组件间协作
  涵盖: 数据库、API、外部服务
  执行时间: <5分钟

端到端测试:   验证完整业务流程
  工具: Cypress, Playwright
  执行时间: <15分钟

5. 部署阶段

环境晋升策略

开发环境 (dev):     自动部署,每次合并触发
测试环境 (staging):  自动部署,main 分支构建成功
预发布 (pre-prod):   手动触发或定时
生产环境 (prod):     手动审批 + 自动部署

部署策略对比

策略 零停机 快速回滚 成本
蓝绿部署 高(双倍资源)
滚动更新
金丝雀发布
重建部署 最低

6. 验证与监控

部署后需要自动验证:

  • 冒烟测试:核心功能的快速验证
  • 健康检查:服务可用性检测
  • 性能对比:与基线对比响应时间和错误率
  • 日志分析:检查是否有新增异常

流水线设计原则

快速反馈

  • 将耗时长的测试放在并行阶段
  • 单元测试在 5 分钟内完成
  • 通过 webhook 和通知实现即时反馈

幂等性

  • 每个阶段可重复执行且结果一致
  • 不依赖外部状态
  • 构建环境在每次运行时保持干净

安全性

  • 密钥不硬编码在流水线配置中
  • 使用 secrets 管理敏感信息
  • 构建产物签名验证

常见流水线示例

单体应用流水线

stages:
  - lint
  - test
  - build
  - package
  - deploy

微服务流水线

stages:
  - lint
  - unit_test
  - build_image
  - integration_test      # 并行
  - security_scan         # 并行
  - deploy_staging
  - e2e_test
  - deploy_production     # 需审批

前端应用流水线

stages:
  - lint_and_typecheck
  - unit_test
  - build
  - deploy_oss             # 部署到对象存储
  - cdn_cache_purge        # 刷新 CDN
  - lighthouse_audit       # 性能审计

工具选择

工具 适用场景 特点
GitHub Actions GitHub 项目 生态丰富,配置简单
GitLab CI GitLab 项目 内置注册表,Kubernetes 集成
Jenkins 大型企业 插件丰富,可定制性强
ArgoCD Kubernetes 原生 GitOps 模式,声明式部署
Drone CI 轻量级团队 YAML 配置,Go 编写,性能好

总结

设计 CI/CD 流水线时,关注三个核心目标:快速(缩短反馈周期)、可靠(一致的构建和部署)、安全(保护交付链路)。从简单的自动化构建测试开始,逐步添加部署和验证环节,在迭代中持续改进。