2.6 DevOps 实践
← 2.5 技术协作 | 首页 | 下一节: 2.7 语言理论与底层 →
持续集成 / 持续交付 / 持续部署
持续集成(CI) 的概念最初由 Grady Booch 于 1991 年提出。其核心主张是不超过一天就将开发者的工作合并到主干,以减少集成问题。
这个定义后来被扩展。如今,CI 意味着存在一个 CI 服务器(如 Jenkins),一旦有新变更合并到主干,就自动触发构建流水线来尽早检测错误。这种问题的快速检测使修复成本远低于传统方法。
| 概念 | 含义 |
|---|---|
| 持续集成(CI) | 频繁将代码合并到主干,每次合并自动触发构建流水线(编译 + 单元测试 + 静态分析),快速检测问题 |
| 持续交付(CDelivery) | CI 基础上,代码始终处于可部署状态,但部署到生产需人工审批。适合 B2B/政府项目 |
| 持续部署(CDeployment) | 无需人工干预,每个通过的变更自动部署到生产。适合 B2C 互联网产品(Facebook、Netflix 日部署数百次) |
CI 是基础——集成越频繁,合并冲突越小。
构建自动化
构建自动化指将通过手动命令执行的编译、打包、测试等步骤编写为脚本或配置文件,使其可以被 CI 系统自动执行,每次提交后无需人工干预。核心要素: - 构建工具(Maven / Gradle / npm / Make / Cargo 等)。 - 制品仓库与镜像注册中心(Artifactory / Nexus / Docker Registry)存放构建产物。 - 一次配置,反复执行,消除"在我机器上能跑"的现象。
测试金字塔
/\
/E2E\ 少量端到端测试:验证关键用户流程
/------\
/集成测试\ 中层集成测试:验证模块间交互
/----------\
/ 单元测试 \ 底层大量单元测试:验证单个函数/方法
/--------------\
- 单元测试:最底层最广泛。测试单个函数/方法,运行极快,无外部依赖。应覆盖所有核心逻辑。
- 集成测试:测试多个模块协同工作。如数据库访问、API 调用。比单元测试慢,但能捕获接口不匹配。
- 端到端测试(E2E):模拟真实用户操作完整流程。最慢、最脆弱,但验证最关键的用户路径。只覆盖核心场景。
金字塔形状的意义:越底层的测试越多、越稳定、越快速;越顶层越少、越脆弱、越慢。
特性开关(Feature Flags / Feature Toggles)
通过配置控制在生产环境中动态启用或禁用功能,无需重新部署。核心价值: - 将代码部署与功能发布解耦——代码已经上线但功能对用户不可见。 - 支持灰度发布:先对 5% 用户开放,逐步扩大。 - 支持快速回滚:出问题时关闭开关而非回滚部署。 - 支持A/B 测试。 - 支持主干开发:未完成的功能藏在开关后面,不影响其他开发。
来源
- Romén Rodríguez-Gil — Continuous Integration, Delivery and Deployment: Key Differences: https://www.romenrg.com/blog/2017/12/31/continuous-integration-delivery-deployment/
← 2.5 技术协作 | 首页 | 下一节: 2.7 语言理论与底层 →