Skip to content

CD 持续部署,持续交付

持续部署(Continuous Deployment)与持续交付(Continuous Delivery)的缩写都是 CD,它们的联系和区别是什么?我的理解:

  • 集成 Integration,将源代码构建为制品或容器镜像,推送到制品/镜像仓库。
  • 部署 Deployment,将制品/镜像仓库分发到服务器上,并成功启动为服务进程。
  • 交付 Delivery,产品功能对用户开放使用。

经典定义

马丁·福勒(Martin Fowler)和《持续交付》作者 Jez Humble 最初定义的:

  • 持续交付 (CDel): 代码始终是可发布的,但去往生产环境需要点一下按钮(手动)。
  • 持续部署 (CDep): 代码通过测试后直接上线(自动)。

区别点: 自动化程度(手动 vs 自动)。

维度持续交付 (Continuous Delivery)持续部署 (Continuous Deployment)
最后一步人工干预(Manual)全自动化(Automated)
核心目标确保代码“随时待命”确保代码“即刻上线”
风险控制靠人的最后把关靠极其严苛的自动化测试套件
适用场景传统企业、受监管行业、复杂 B 端产品互联网产品、SaaS 应用、微服务架构
部署频率按需发布(周、月或天)高频发布(每小时甚至每分钟)

Jetbrains 的 CI/CD 产品 TeamCity 文档描述:持续交付和持续部署之间的区别在于发布到生产的最后阶段。采用持续交付,将构建工件发布到生产时需要手动输入。发布流程通常完全自动化,但必须有人决定是否以及何时发布具体版本。 采用持续部署,每次完成流程的先前阶段时,构建都会自动发布到生产中。

Integration Delivery Deployment

我在《从0到1实现微服务架构(第2版)》中,发现持续交付与持续部署的概念刚好相反😅。

持续部署

Continuous Deployment

持续交付

Continuous Delivery

现代演进定义

交付(Delivery)是面向用户或业务的,而部署(Deployment)是面向技术的。

  • 对于技术侧,代码频繁地往生产服务器上“搬运”。即使功能没写完,只要代码不报错,就合入并部署。
  • 对于业务侧,当功能闭环、UI 准备好、产品经理点头后,通过开关让用户看到。

部署是交付的前提,从部署到交付的过程依赖于功能开关、灰度用户测试、少量用户试用等,确保在生产环境中无风险后,再交付给终端用户。

例如某需求实现包含10个子模块,分3次部署到生产环境,但是只有功能模块完整实现且验证通过后才对用户交付。相反,如果所有功能开发完成后再部署到生产环境,相比之下会带来更大的风险和不确定性。持续交付中持续并非连续性,而仅代表一个频率,因为需要用户决策,而持续集成和持续部署,持续则代表频繁地、连续的执行。

另外,部署也与目标环境无关,将制品或镜像推送到测试环境(TEST)、预发布环境(STAGING)或生产环境(PRODUCTION)并启动都可以称为部署。

CI,CD,CD

持续交付是面向终端用户的,如果没有交付门限,那么部署到生产环境意味着交付给终端用户。交付门限是值得研究的一项复杂的工程,典型的技术包括:蓝绿部署、流量切换、特性开关、测试用户。因此,我认为更贴切的领域术语是:持续集成、持续部署、渐进式交付

顺便一提,在 CI/CD 的能力构建中,增量开发下的里程碑计划:

阶段一:流水线能力支持,实现持续集成、持续部署的自动化。

阶段二:多环境支持,测试环境、预发布环境、生产环境,构建集成和部署的质量门限,如自动化测试、代码质量审查、安全漏洞扫描、功能验收。

阶段三:用户交付安全保障,蓝绿部署、流量切换、特性开关等。

总结

从现代演进视角看,持续部署与持续交付的核心区别在于面向对象和目标不同。部署是技术层面的操作,关注如何将代码频繁、安全地部署到服务器;而交付是业务层面的决策,关注功能何时对终端用户可见。

允许开发团队将代码分阶段部署到生产环境,即使功能未完全完成也可先行部署,待验证无误后再全面开放给用户。这种解耦带来了显著优势:技术团队可以保持高频部署节奏,降低单次变更风险;业务团队则可以灵活控制功能发布时机,确保用户体验。交付门限(如蓝绿部署、流量切换、特性开关等)是实现安全交付的关键技术保障。

因此,我认为更准确的领域术语应该是:持续集成、持续部署、渐进式交付。这一组合更精准地描述了现代软件从代码提交到用户使用的完整流程,体现了技术与业务的协同演进。

参考

  1. 《从0到1实现微服务架构(第2版)》持续集成,持续部署,持续交付,https://coder4.com/homs_online/ch01-architecture/continuous-x.html#持续部署
  2. JetBrains TeamCity 文档,CI CD 指南,https://www.jetbrains.com/help/teamcity/continuous-delivery-and-deployment.html