生产环境修复已就绪,Web build 也绿了,团队本可以在几分钟内完成部署。可随后有人想起,移动端发布还得等应用商店审核、合规检查清单,或者一位不在岗的发布经理。code 已经完成,产品却卡住了。
这个空档正是 持续交付 (Continuous Delivery) 至关重要。它为团队提供了一种可重复的方式,确保每次变更都经过测试、打包、可追溯,并随时准备发布——无论最后一步是自动化生产部署、人工审批,还是向已安装应用交付移动更新。
目录
- 理解现代软件团队中的持续交付
- 持续交付流水线的核心组件
- 使用 DORA 指标衡量流水线健康度
- 持续交付 vs 持续部署
- 渐进式交付模式
- 移动端与跨平台应用的持续交付
- 在受监管行业中平衡速度与安全性
- 实施步骤与常见误区
理解现代软件团队中的持续交付
一个团队合并了一个小修复,在产品负责人完成问题检查之前,就已准备好经过验证的构建版本用于发布。另一个团队则将变更打包成大型移动应用发布,等待二进制审查周期,并祈祷在狭窄的发布窗口内不会出错。两个团队可能都使用了持续集成,但只有第一个团队建立了让软件随时可发布的交付流程。
持续交付意味着通过自动化的构建、测试、打包和发布准备,使软件始终处于可发布状态。 Jez Humble 和 David Farley 于 2010 年通过 《持续交付:发布可靠软件的系统方法》正式推广了这一实践。他们的定义将持续集成从构建自动化扩展到了测试和部署新构建所需的更广泛工作流,正如 ACM 关于持续交付工作的记录所述。
持续集成在开发者将变更合并到共享代码库时验证这些变更。持续交付更进一步,生成发布候选版本,对照明确的质量门禁进行检查,存储生成的制品,并使其可用于受控发布。最终发布仍可能需要人工批准。

人工决策是有意为之
持续交付和持续部署不能互换使用。
在持续交付中,pipeline 会把直到生产就绪的所有步骤自动化。发布经理、产品负责人或工程师仍可决定变更何时到达线上用户。持续部署则取消了这个决策,把每个通过 pipeline 的变更直接推送到生产环境。
工厂装配线是一个很好的类比。每个工位都会检查产品、记录结果,并阻止有缺陷的产品继续流转。在发货区,经理仍然决定哪辆卡车何时发出。持续交付(Continuous Delivery)也是同样的逻辑。 自动化负责可重复的验证,而人类保留对业务时机和风险的控制权。
对于移动团队来说,这种区分尤为重要。原生二进制文件可能需要应用商店审核、协调沟通,或来自受监管业务部门的批准。即使最终发布由人工控制,流水线仍然可以自动构建、测试、签名并准备二进制文件。
实战规则: 如果你的团队无法按需生成经过测试且可识别的发布候选版本,那么它尚未实现持续交付。
关键问题不在于你的团队是否频繁发布,而在于下一个发布是否可预测、可重复且安全可推广。
持续交付流水线的核心组件
交付流水线将源代码变更转化为受控的发布候选版本。无论是 Web 服务、Capacitor 应用还是 Electron 桌面应用,具体实现各不相同,但职责保持一致。
源代码管理定义输入
每个 pipeline 都需要一个可信的单一事实来源。开发者将应用 code、配置、测试和 pipeline 定义提交到版本控制中。任何变更都应可追溯至某个 commit、pull request 或已批准的修订版本,而非未记录的本地 build。
分支策略的重要性不如清晰度。团队可以使用短生命周期分支、主干开发或其他模型,但 pipeline 应明确显示正在构建哪个修订版本,以及哪个修订版本符合发布条件。
构建生成可复现的产物
Build 阶段将源 code 转换为可部署的产物。对于跨平台应用,这可能包括 web bundle、原生项目输出、Electron 包或已签名的移动二进制文件。Build 应在干净、一致的环境中运行,并捕获其依赖项,而不是依赖开发者的机器。
本地通过但在 CI 中失败的 build 不是交付流程。它是发布漂移的诱因。
测试提供分层证据
没有单一的测试套件能建立发布信心。高效的 pipeline 会结合不同范围的检查:
- 单元测试 快速捕获隔离函数和组件中的缺陷。
- 集成测试 验证与服务、插件、存储和平台 API 的通信。
- 验收测试 测试用户工作流,例如身份验证、结账、同步或离线恢复。
- 静态检查与策略检查 强制执行代码格式、依赖规则、安全要求及其他项目标准。
对于移动端和跨平台应用,应在模拟生产配置的 staging 环境中运行端到端测试。在简化 mock 环境下通过的测试,可能无法暴露平台权限问题、API 版本不匹配或更新处理失败等问题。
Artifacts 保留发布标识
Pipeline 应存储通过验证的确切 Artifact。如果依赖项、工具或配置发生变化,之后从同一源码重新构建可能得到不同结果。Artifact 存储让团队有一个稳定的对象,可用于晋级、检查、对比和回滚。
Deployment automation 负责推进已批准的 Artifact
Deployment automation 将验证过的 Artifact 发布到目标环境。它应一致地应用配置,记录是谁或什么发起了操作,并在阶段失败时清晰展示状态。团队可以使用部署服务、CI workflow 或特定平台的发布系统,但流程不应依赖一连串手动命令。
本指南中介绍的 Capacitor 团队的 deployment automation 指南 涵盖将验证过的变更推进到各个环境的运维层面。

质量门禁与回滚是设计的一部分
质量门禁是流水线继续推进前必须满足的明确条件。示例包括测试通过、签名有效、依赖扫描获批、环境配置匹配或完成必要评审。当团队明确记录门禁保护的内容及谁有权覆盖时,门禁效果最佳。
回滚同样需要重视。如果部署引入了严重缺陷,恢复路径应自动化,或简化为经过充分测试的简单操作。如果流水线能快速发布,但需要团队手动重建上一个版本才能回滚,则不足以支撑高频交付。
一种技术 对持续交付及其自动化流水线机制的定义 强调了这一核心特性:变更会被自动构建、测试并准备好发布,而生产环境部署可能仍需人工决策。流水线不仅仅是一个时间表,它是让发布就绪状态持续存在的架构。
使用 DORA 指标衡量流水线健康度
团队可以在提高部署频率的同时让生产环境变得不稳定。这就是为什么交付性能不能仅看发布次数。
DORA 定义了四个核心流动指标:
| 指标 | 含义说明 |
|---|---|
| 部署频率(Deployment frequency) | 团队部署变更的频率 |
| 变更前置时间 | 变更从提交到生产环境所需的时间 |
| 变更失败率 | 部署导致故障、回滚、热修复或其他恢复事件的频率 |
| 平均服务恢复时间 | 故障发生后,团队将服务恢复到健康状态的速度 |
DORA 性能等级显示,精英团队每天部署 多次,实现 一小时以内的变更前置时间,并将变更失败率保持在 0 到 15% 的范围. 表现较差的团队部署频率 低于每六个月一次 并等待 超过六个月 变更才能到达生产环境,根据 Octopus 持续交付指标论文.
这些数据并不是脱离上下文就能照搬的目标。它们说明为什么应把交付视为一个控制系统。更小的批次能缩小每次发布的影响面,而更短的反馈循环能帮助团队在更接近引入缺陷的变更处发现缺陷。
没有恢复能力的速度是陷阱
部署频率既容易让人沾沾自喜,也容易被误用。移动端团队可能发布许多低风险 bundle,却反复回滚失败的变更。后端团队可能部署频繁,但事故后恢复服务耗时过长。这两种情况下,单看速度都会掩盖运维短板。
应同时追踪这四项指标。如果交付周期缩短而变更失败率上升,说明 pipeline 跑得比其保障机制还快。如果部署频率一直很低,而 build 却闲置等待审批,瓶颈可能在治理流程,而不是工程能力。
当前的 DORA 指南还建议在核心流程指标之外,关注 变更失败率、部署返工率、部署失败恢复时间以及 pipeline 稳定性,正如在……中所述 DORA 指标指南。这些措施对移动流水线尤为有用,因为提交商店失败、二进制文件被拒或存在问题的 live update 都可能引发返工,而简单的部署次数无法揭示这些问题。
端到端监控路径
从提交到构建、测试、制品发布、审批、部署及恢复,记录时间戳和结果。将每次发布关联到其源版本和环境。对于移动更新,需包含渠道、bundle 版本、采用状态、失败状态和回滚事件。
将四个 DORA 结果指标与先行指标配对,以便在指标恶化前发现问题:
- 流水线时长: 警惕构建或测试阶段耗时过长,从而诱发绕过流程的行为。
- 部署失败率: 区分应用缺陷与基础设施、配置及流水线故障。
- 回滚次数: 将频繁的回滚视为信号,去检查测试缺口、发布设计或变更规模。
- 测试不稳定: 跟踪那些并非由真实产品缺陷导致的失败测试,因为嘈杂的门槛会让团队习惯忽略失败。
- 制品可追溯性: 确认生产版本能映射回源代码修订及其验证证据。
团队常发现最慢的环节并非编译器或测试运行器,而是人工审批队列、不可靠的 staging 环境、缺失的签名步骤,或无人演练过的回滚流程。
健康的 pipeline 能让失败尽早暴露,并让恢复变得平淡无奇。
使用 发布速度实践 以审视整个流程,而非孤立地优化某个阶段。目标是更快的学习和更安全的变更,而非追求发布速度的虚荣指标。
持续交付 vs 持续部署
区别仅在于一道门槛,但这道门槛改变了运营模式。
持续交付 为每个通过的变更做好发布准备,最终的生产决策仍由人工掌控。 持续部署 自动将通过所有质量门禁的变更推送到生产环境。第二种模式可以缩短反馈周期,但它也假定自动化检查、可观测性和回滚足够可靠,能取代审批环节。
| 维度 | 持续交付 | 持续部署 |
|---|---|---|
| Pipeline 范围 | 构建、测试、打包并准备发布 | 构建、测试、打包并部署发布 |
| 生产环境决策 | 由人工审批或触发部署 | Pipeline 自动完成生产环境切换 |
| 风险控制 | 将自动化与审慎的发布关卡相结合 | 高度依赖自动化检测与恢复 |
| 适用场景 | 移动应用、受监管的工作流以及需要协调的变更 | 具备强大测试、功能标志、监控和回滚能力的成熟 Web 服务 |
| 主要权衡 | 控制力更强,但可能存在审批延迟 | 反馈更快,但在暴露前人工审查较少 |
当团队能够快速检测不良变更并毫不犹豫地恢复先前状态时,持续部署才有意义。功能标志、金丝雀发布、健康检查和自动回滚可以缩小影响范围,但它们无法弥补测试薄弱或缺乏可观测性的缺陷。
对于移动应用而言,持续交付往往是更务实的选择。应用商店审核、原生版本协调、客户沟通以及平台限制,都可能使完全自动化的生产部署变得不切实际。团队仍然可以自动化几乎所有环节,仅对涉及业务或平台风险的步骤保留审慎的人工决策。
关于采用障碍的研究支持这种谨慎态度。2017 年的一项实证研究确定了 11 个因素 限制了组织将变更自动推送到生产环境,包括缺乏自动化验收测试、手动质量检查、自动化测试覆盖率不足以及官僚化的部署流程,如 持续交付局限性研究.
这并非成熟度竞赛。它应反映你的团队能够控制的故障模式。
如需更详细地比较这两种模型,请参阅 持续交付与持续部署。实际测试很简单:如果移除审批关卡会在团队检测到并回滚问题之前暴露用户,请保留该关卡并优先改进流水线。
渐进式交付模式
预发布环境不应是用户看到变更前的唯一关卡。成熟的团队会将部署自动化与生产端控制相结合,在流量扩展前限制爆炸半径并定义晋升规则。
| 模式 | 工作原理 | 回滚速度 | 最佳使用场景 |
|---|---|---|---|
| Canary 发布 | 在全面推广前,先向小部分流量或基础设施开放新版本 | 接入健康信号和自动回滚后,速度很快 | 基础设施变更,以及需要验证线上行为的变更 |
| 蓝绿部署 | 在两个类生产环境之间切换流量 | 当路由能干净利落地切回时,速度非常快 | 合规敏感的切换,以及需要预备回退方案的发布 |
| 功能开关 | 在控制用户能否访问该功能的同时,发布 code | 应用行为响应迅速,前提是标志服务保持可用 | 高风险业务逻辑、逐步放量,以及与营销协同的发布 |
只有在部署前定义好成功标准,渐进式策略才能奏效。Pipeline 需要健康检查、有用的遥测数据、晋级规则以及经过验证的回滚路径。团队常常会组合使用多种模式,例如为支付规则加功能开关,为平台变更做金丝雀发布。请参阅 分阶段发布与全量发布的对比 了解评估这些选择的其他方式。
移动端与跨平台应用的持续交付
移动端团队面临着 Web 团队通常能避开的交付限制。Web 部署只要生产系统上线了新的 code 即可触达用户。而原生移动端的变更可能需要等待应用商店审核、用户采用和安装后才能生效。
但这并不意味着移动端团队必须放弃持续交付。而是需要将 原生外壳 与 Web 层 进行分离(在平台允许的情况下)。Capacitor 和 Electron 应用可以将 JavaScript、CSS 及资源与原生功能分开打包,从而为符合条件的变更创建一条无需新的商店二进制包的交付路径。

像这样的 Live Update 平台 Capgo 可以将已签名的 web bundle 发布到 CapacitorJS 和 Electron 应用的目标 channel。在此工作流中,团队仍需在 CI 中构建并测试 bundle、执行质量门禁并留存产物。部署阶段会把已批准的 bundle 发送到 staging 或 production 等 channel,已安装的应用会在下次启动时应用更新。
这保留了 CD 的核心原则。应用不会从临时搭建的端点下载未经验证的源码。团队拥有带版本号的产物、受控的发布范围、更新可见性和恢复方案。
移动端 pipeline 需要额外的门禁
一个实用的跨平台 pipeline 除了验证应用行为外,还应验证:
- 平台兼容性: 确认 bundle 能在目标应用版本已安装的 native runtime 上正常工作。
- 签名与完整性: 确保发布的更新已签名,且客户端仅接受有效的 bundle。
- Channel 定向: 从开发环境晋升到预发布环境,再进入生产环境,避免用户群体混杂。
- 启动恢复: 验证失败的更新可以被拒绝或回滚,确保应用不会持续不可用。
- 原生边界检查: 阻止需要原生插件或权限变更的 Web 层修改,因为这些变更仍属于新的二进制发布范畴。
增量更新通过仅发布变更文件来减少传输数据量。定向发布还允许团队在更广泛采用之前,将变更暴露给受控受众。这些控制措施不能替代测试,也不应成为绕过商店策略或原生兼容性要求的理由。
以下演练展示了 Live Update 如何融入 Capacitor 交付工作流,同时保留使 CD 可靠的验证阶段。
关键的设计决策是定义哪些内容可以作为 Web bundle 发布,哪些需要原生发布。UI 变更、文案、JavaScript 逻辑和兼容资源可以走更快的路径。对原生 code、权限、插件或平台权限的变更则需要走较慢的、由商店中介的路径。将这些视为不同的发布类别,可以在不假装移动平台没有外部控制的情况下保持 pipeline 的快速运行。
在受监管行业中平衡速度与安全性
受监管的团队常将发布缓慢归咎于合规要求,但更深层的问题通常是繁琐的人工合规工作、孤立的文档以及薄弱的审计追踪。如果发布流程依赖人工在不同系统间复制证据,即使应用拥有出色的自动化测试,发布速度依然会很慢。
当团队将需求编码到 pipeline 中时,持续交付可以提升管控能力。质量门禁可以要求已批准的测试、已签名的产物、有记录的变更引用,或晋级前的评审。Pipeline 会自动保留结果,为审计人员和运维人员提供一致的记录,而无需依赖记忆和截图。
一套 2025 年针对 50 家金融机构的调查报告 这份关于金融机构持续交付的报告发现,自动化持续交付 pipeline 能在提高吞吐量的同时增强稳定性,挑战了“持续交付必须以安全换速度”的假设。
自动化使控制措施可重复
手动部署流程会产生差异。一位工程师可能正确执行了检查清单,而另一位可能遗漏了迁移检查或部署了错误的产物。自动化并不能消除责任,但它使预期流程变得可执行且可审查。
受监管的 pipeline 应使这些控制措施可见:
- 变更标识: 将发布与源版本、产物、工单及审批角色关联起来。
- 质量证据: 将测试结果和门禁结果与发布记录一起存储。
- 发布晋级边界: 将开发、预发布和生产环境的权限分开。
- 回滚准备: 保留上一个已知良好版本,并让恢复流程可测试。
- 运维信号: 发布后监控错误、可用性、更新失败和部署结果。
风险不在于团队发布得快,而在于在没有可观测性、回滚能力或变更追踪的情况下发布。缓慢的手动流程仍可能发布未经测试或配置错误的变更,而自动化流程可以在进入生产环境前稳定地拦截这类变更。
对于金融科技或医疗保健领域的移动端团队,持续交付可能意味着带有文档记录审批关卡的自动化 bundle pipeline。这仍能带来主要好处——始终就绪的发布,同时不必迫使组织移除其风险模型所要求的管控措施。正在处理这些要求的团队可以使用 针对 Capacitor 应用的 CI/CD 合规性检查 作为其发布设计的一部分。
安全性来自证据、受控暴露和恢复,而不是把每次部署都变成手动操作。
实施步骤与常见误区
从团队现有的流程开始,然后逐个移除手动交接环节。
- 将应用 code、测试、配置和 pipeline 定义纳入版本控制。 选择一种能清晰界定 release candidate 的分支模型。
- 先自动化 build 和测试阶段。 在自动化生产发布之前,先在干净环境中运行单元测试、集成测试和验收检查。
- 定义明确的质量门禁。 记录清楚哪些检查必须通过,哪些失败会中断 pipeline。
- 存储不可变 artifacts。 直接发布通过验证的 artifact,而不是为每个环境重新 build。
- 自动化部署和回滚。 发布失败应触发明确的恢复操作,而不是紧急手动排查。
- 从一开始就加入可观测性和指标。 追踪部署频率、前置时间、变更失败率和平均服务恢复时间。
常见故障是可以预见的。团队往往在提升测试覆盖率之前就先自动化了发布排期,让审批队列长期敞开,把代码部署到与生产环境不一致的环境,或者只衡量发布频率。Feature flags 可以把部署和用户可见性分开,但这不能成为未测试的 code 或忘记清理 flag 的借口。
对于移动端和跨平台应用,在选择 Live Updates 方案前,先明确 Native 与 Web 的发布边界。Bundle pipeline 应拒绝需要 Native 能力的变更,而兼容的 JavaScript、CSS、文案、配置和资源则可以走自动化流程。
Capgo 为 CapacitorJS 和 Electron 应用提供签名 Live Updates、定向 Channel、CI/CD 集成、差分 Bundle、可观测性和回滚保护,帮助团队让符合条件的移动端变更随时可发布,而不必把应用商店审核当作唯一的交付路径。请访问 Capgo 以评估它的更新工作流如何适配你现有的持续交付 pipeline。