跳转至

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 语言理论与底层