跳过主要内容

持续交付是什么?它如何工作?

了解持续交付、CI和持续部署之间的区别,以及如何使用实时更新的移动团队来发布修复

持续交付是什么?它如何工作?

一项生产修复已经准备好,web构建是绿色的,您的团队可以在几分钟内部署它。然后有人记得,移动发布仍然依赖于应用商店的审查,合规清单或一个出差的发布经理。code已经完成,但产品并没有移动。

那就是 连续交付 它使团队能够重复地测试、打包、跟踪并准备好每个变更,无论最终步骤是自动部署到生产环境、人工审批还是将更新推送到已安装的应用程序。

目录

理解现代软件团队中的持续交付

一组团队将一个小的修复合并到代码中,并在产品经理检查问题之前就有一个经过验证的构建准备好发布。另一组团队将更改组合到一个大的移动发布中,等待二进制审查周期,并希望在窄的发布窗口中没有问题。两组团队可能使用持续集成,但只有前者构建了一个保持软件始终可供发布的交付过程。

持续交付意味着通过自动化的构建、测试、打包和发布准备来维持软件的始终可供发布的状态。 Jez Humble 和 David Farley 在 2010 年正式推广了这一实践通过 持续交付: 通过构建、测试和部署自动化可靠的软件发布. 他们的定义将持续集成扩展到测试和部署所需的更广泛的工作流程, 如 ACM 记录中对持续交付工作的描述

持续集成验证开发人员将更改合并到共享代码库中的过程。持续交付的下一步是产生发布候选版本, 检查它是否符合明确的质量门槛, 将产生的工件存储起来, 并使其可用于受控的发布。 最终的发布仍然需要人工审批

持续交付和持续部署不是可互换的

持续交付的管道自动化了到生产就绪的所有步骤。 一个发布经理、产品负责人或工程师仍然可以决定何时将更改传递给在线用户。持续部署则移除了这一决定并将每个通过管道的更改直接发送到生产

持续交付的流程图, 与传统开发周期的快速流程相比, 后者具有更长的等待时间

这一决定是有意的

A制造线是一个有用的比较。每个工位检查产品,记录结果,并防止缺陷品向前推进。到货时,经理仍然决定哪辆卡车离开和什么时候离开。持续交付的工作方式相同。 自动化处理可重复的验证,而人保留了对业务时间和风险的控制权。

对于移动团队来说,这种区别尤其重要。原生二进制可能需要商店审查、协调的通信或来自受管制业务单位的批准。管道仍然可以自动构建、测试、签名和准备二进制文件,即使人类控制最后的发布。

实用规则: 如果您的团队无法在需求时生产一个经过测试的、可识别的发布候选者,那么它还没有实现持续交付。

一个有用的起点是 持续交付管道概述。关键的问题不是您的团队是否不断发布。它是下一个发布是否可预测、可重复和安全推广的。

持续交付管道的核心组件

持续交付管道将源代码变更转换为受控的发布候选者。实现方式在Web服务、Capacitor应用程序和Electron桌面应用程序之间有所不同,但责任保持一致。

源代码控制定义了输入

Every pipeline needs a trusted source of truth. Developers commit application code, configuration, tests, and pipeline definitions to version control. A change should be traceable to a commit, pull request, or approved revision, not to an undocumented local build.

分支策略不如清晰度重要。团队可以使用短暂的分支、干基开发或另一个模型,但管道应该明显地显示哪个修订版本正在构建哪个修订版本是合格的发布。

构建创建可复制的工件

The build stage transforms source code into something deployable. For a cross-platform application, that might include a web bundle, native project output, an Electron package, or a signed mobile binary. The build should run in a clean, consistent environment and capture its dependencies rather than relying on a developer’s machine.

一个在本地通过的构建但在CI中失败的构建不是一个交付过程。它是一个释放漂移的邀请。

测试提供层次化的证据

没有单个测试套件可以建立发布的信心。有效的管道结合了不同范围的检查:

  • 单元测试 快速捕捉孤立函数和组件中的缺陷。
  • 集成测试 验证与服务、插件、存储和平台API的通信。
  • 验收测试 模拟用户工作流程,例如身份验证、结帐、同步或离线恢复。
  • 静态和策略检查 强制格式化、依赖项规则、安全要求和其他项目标准。

对于移动和跨平台应用程序,运行端到端测试以在模拟生产配置的环境中测试。测试通过对简化的模拟进行测试可能不会暴露平台权限问题、API版本不匹配或更新处理失败的问题。

工件保留发布身份

管道应该存储经过验证的工件。从相同源码重建可能会产生不同的结果,如果依赖项、工具或配置发生了变化。工件存储为团队提供了一个稳定的对象来推广、检查、比较和回滚。

部署自动化将经过验证的工件发布到指定环境。它应该一致地应用配置、记录谁或什么触发了动作,并在某个阶段失败时暴露清晰的状态。团队可以使用部署服务、CI工作流或平台特定的发布系统,但过程不应该依赖于一系列手动命令。

部署自动化指南

对__CAPGO_KEEP_0__团队的部署自动化指南 deployment automation guidance for Capacitor teams 一个图表,展示了连续交付管道的五个阶段,包括构建、测试和部署。

部署自动化指南

质量门控和回滚是设计的一部分

质量门控是指管道前进之前必须满足的明确条件。例如,测试成功、有效签名、通过的依赖扫描、匹配的环境配置或必需的审查。门控在团队记录他们保护的内容和谁可以覆盖它们时最有效。

回滚需要同等的关注。如果部署引入了严重的缺陷,恢复路径应该自动化或简化为一个简单、经过测试的动作。一个可以快速发布但需要团队重建上一个发布的管道并不是频繁交付的安全保障。

技术 连续交付的技术定义及其自动化管道机制 强调了这一中心属性:更改自动构建、测试和准备发布,而生产部署可能仍然需要手动决策。管道不仅仅是一个时间表。它是使发布就绪的连续性架构。

使用DORA指标衡量管道健康

团队可以增加部署频率,同时使生产环境更不稳定。因此,交付性能需要更多的发布次数。

DORA定义了四个核心流程指标:

指标 它告诉你
部署频率 团队如何频繁部署更新
变更的带头时间 变更从提交到生产环境所需的时间
变更失败率 部署导致失败、回滚、热修复或其他恢复事件的频率
恢复服务的平均时间 DORA 高效团队的表现带显示出

每天部署多次 实现带头时间小于一小时保持变更失败率在 低水平DORA 高效团队的表现带显示出每天部署多次、带头时间小于一小时、保持变更失败率在低水平 0至15%范围.较差的团队部署 不到每六个月 并等待 超过六个月 等待更改到达生产环境,根据Octopus连续交付指标白皮书 这些数字不是脱离背景下的目标。它们表明交付应该被视为一个控制系统。较小的批次减少了每个发布的表面面积,而更短的反馈环路有助于团队在更接近引入变化的位置检测缺陷。.

速度而无恢复是陷阱

部署频率容易被庆祝,也容易被滥用。一个移动团队可能发布许多低风险的包装文件,而反复回滚失败的更改。一个后端团队可能频繁部署,但在事故后花费太长时间恢复服务。在两种情况下,速度单独掩盖了运营的弱点。

一起跟踪四个指标。如果lead time下降而变化失败率上升,管道比其保障措施更快。如果部署频率保持低,而构建文件等待批准而闲置,瓶颈可能是治理而不是工程。

当前DORA指南还建议在核心流程指标之外看待

Current DORA guidance also recommends looking beyond the core flow metrics at 改善失败率、重新部署率、失败恢复时间和管道稳定性,如 DORA 度量指南.这些指标对于移动管道特别有用,因为失败的商店提交、被拒绝的二进制文件或问题的实时更新可能会导致重新工作,而简单的部署计数无法揭示。

从头到尾跟踪路径

捕获从提交到构建、测试、发布、批准、部署和恢复的时间戳和结果。将每个发布连接到其源代码版本和环境。对于移动更新,包括频道、包版本、采用状态、失败状态和回滚事件。

团队经常发现,慢的部分不是编译器或测试运行器,而是手动批准队列、不可靠的测试环境、缺失的签名步骤或没有练习过的回滚过程。

健康的管道使失败变得可见并且恢复变得乏味。

使用 发布速度实践 来检查整个流程,而不是孤立优化一个阶段。目标是更快的学习和更安全的变化,而不是与交付速度相关的虚荣数字。

持续交付与持续部署

差异在于一个门槛,但这个门槛改变了运营模式。

连续交付 为每次通过的变更做好发布准备,并将最终的生产决策留在人类控制之下。 连续部署 自动将所有通过质量门槛的变更推送到生产环境。这个第二种模式可以缩短反馈环路,但也假设自动化检查、可观察性和回滚功能足够强大以取代审批步骤。

方面 连续交付 连续部署
管道范围 构建、测试、打包和准备发布 构建、测试、打包和部署发布
生产决策 A人可能批准或触发部署 管道会自动完成生产过渡
风险控制 结合自动化和有意的发布门槛 依赖高度自动化的检测和恢复
适合 移动应用、受管控的工作流程和需要协调的变化 成熟的Web服务,具有强大的测试、标志、监控和回滚
主要权衡 更多的控制,但可能会延迟批准 更快的反馈,但在暴露之前没有人类审查

持续部署在团队可以快速检测到坏的变化并在不犹豫的情况下恢复到之前状态时才有意义。特征标志、金丝雀发布、健康检查和自动回滚可以减少爆炸半径,但它们无法弥补弱测试或缺乏可观察性。

连续交付通常是移动应用程序更诚实的选择。商店评论、原生版本协调、客户沟通和平台约束可以使完全自动的生产部署成为不现实。团队仍然可以自动化几乎所有内容,并保留对承担商业或平台风险的步骤的有意决定。

研究表明,谨慎是有道理的。2017年的一项实证研究确定了 11个因素 限制了组织推送自动更改到生产环境,包括缺少自动验收测试、手动质量检查、自动测试覆盖不足以及官僚化的部署流程,详见 连续交付限制研究.

这不是成熟度竞赛。它应该反映团队可以控制的失败模式。

要了解这两种模型的详细比较,请参见 连续交付和连续部署。实践测试很简单:如果去掉审批门槛会暴露用户在团队检测并逆转问题之前,保留门槛并先改进管道。

移动和跨平台应用程序的连续交付

Mobile teams inherit a delivery constraint that web teams often avoid. A web deployment can reach users as soon as the production system serves the new code. A native mobile change may wait for store review, user adoption, and installation before it becomes available.

并非意味着移动团队必须放弃持续交付。它意味着他们需要将 原生 shellweb层 在允许的情况下。Capacitor 和 Electron 应用程序可以将 JavaScript、CSS 和资产与原生功能分开打包,创建一个不需要新商店二进制文件的交付路径。

来自 https://capgo.app 的截图

Capgo context

HTML 文本片段来自更长的 Capgo UI 字符串(父项 `submitting_a_pr_to_capgo`)。页面/区域:Capgo 市场网站。角色:网站复制句子。见于:contributing.astro 页面。保留 Capgo 产品/品牌和开发人员术语的原始形式。

可以将签名的 web 包发布到针对 CapacitorJS 和 Electron 应用程序的目标频道。 在该工作流程中,团队仍然在 CI 中构建和测试包,应用质量门控,并记录 artifact。 部署阶段将批准的包发送到频道,如测试或生产,安装的应用程序在下一次启动时应用更新。

这保留了核心 CD 原则。应用程序没有从临时端点下载未验证的源代码。团队有一个版本化的 artifact、受控的观众、更新可见性和恢复计划。

  • 兼容性: 确认已安装的目标应用程序版本的本机运行时环境中是否能正常工作。
  • 签名和完整性: 确保发布的更新已签名,且客户端只接受有效的包。
  • 渠道目标: 从开发环境推送到测试环境,然后再推送到生产环境,避免混合目标用户。
  • 启动恢复: 验证失败的更新可以被拒绝或回滚,以防止应用程序无法正常使用。
  • 本机边界检查: 阻止需要本机插件或权限更改的网页层更改,因为这些仍然属于新二进制发布。

差异更新可以减少发送的数据量,通过发布仅更改的文件。目标发布也允许团队在更广泛的采用之前将更改暴露给受控的受众。这些控制不应取代测试,并且不应成为绕过商店政策或本机兼容性要求的理由。

以下教程展示了如何将实时更新集成到Capacitor交付工作流中,而不移除使CD可靠的验证阶段。

重要的设计决策是定义可以作为Web包装的内容以及需要本机发布的内容。UI变化、复制、JavaScript逻辑和兼容资产可能会遵循更快的路径。对本机code、权限、插件或平台许可的更改需要更慢、通过商店介质的路径。将它们视为不同的发布类别可以保持pipeline的速度,而不假设移动平台没有外部控制。

简化速度和安全性在受监管行业中的平衡

受监管团队经常将延迟发布归咎于合规,但更深层次的问题通常是手动合规工作、孤立的文档和弱的审计记录。依赖于人工复制证据之间的系统的发布,即使应用程序具有优秀的自动化测试,也会保持慢速。

连续交付可以改善控制,当团队将要求编码到pipeline中时。质量门控可以要求批准的测试、签名的艺术品、文档化的更改参考或审查之前的推广。pipeline可以自动保留结果,给予审计员和操作员一致的记录,而不是依赖于记忆和截图。

A 2025年调查了50家金融机构的报告 发现自动化的连续交付pipeline可以提高吞吐量,同时也增加了稳定性,挑战了连续交付必须以安全性为代价来提高速度的假设,根据连续交付在金融机构中的报告。

自动化使控制可重复

手动部署流程会产生差异。一个工程师可能正确执行检查清单,而另一个工程师可能会错过迁移检查或部署错误的工件。自动化并不会消除责任,但它使预期的程序可执行和可审查。

一个受管控的管道应该使这些控制可见:

  • 变更身份: 将发布与源代码版本、工件、工单和批准角色绑定。
  • 质量证据: 将测试结果和门控结果与发布记录存储。
  • 推进边界: 将开发、测试和生产权限分开。
  • 回滚准备: 保持上一个已知良好的版本可用,并使恢复可测试。
  • 运维信号: 监控错误、可用性、更新失败和发布结果后发布。

风险不是团队快速交付。风险在于没有可观察性、回滚能力或变更跟踪。一个慢的手动过程仍然可以发布未测试或配置错误的更改,而一个自动化的过程可以在生产之前一致地阻止它。

对于金融科技或医疗保健的移动团队,持续交付可能意味着自动化的捆绑管道与文档的审批门控。这样仍然可以实现主要的好处,即无限期准备的发布,而不强制组织去移除其风险模型所需的控制措施。团队可以通过那些要求来工作 遵守法规要求为Capacitor应用程序 安全来自证据、受控暴露和恢复。它不来自于让每个部署都手动。

实施步骤和常见的避免陷阱

从团队当前的路径开始,然后逐一移除手动传递。

将应用程序__CAPGO_KEEP_0__、测试、配置和管道定义纳入版本控制。

  1. Put application code, tests, configuration, and pipeline definitions under version control. 首先自动化构建和测试阶段。
  2. 在清洁环境中运行单元、集成和验收检查,然后再自动化生产推广。 定义明确的质量门控。
  3. Define explicit quality gates. 写下必须通过的检查和停止管道的失败项。
  4. 存储不可变的艺术品。 将经过验证的艺术品推广到环境中,而不是为每个环境重建它。
  5. 自动部署和回滚。 失败的发布应该触发一个明确的恢复行动,而不是紧急的手动调查。
  6. 从开始就添加可观察性和指标。 跟踪部署频率、到达时间、变更失败率和恢复服务的平均时间。

常见的失败是可预测的。团队在提高测试覆盖率之前会自动化发布计划,永久打开批准队列,部署到不类似生产环境的环境中,或者只测量他们的发布频率。特征标志可以将发布与用户暴露分离,但它们并不能免除未测试的code或遗忘的标志清理。

对于移动和跨平台应用,定义原生和web发布边界之前选择实时更新路径。一个捆绑管道应该拒绝需要原生能力的更改,而兼容的JavaScript、CSS、复制、配置和资产可以遵循自动化路线。


Capgo提供了签名的实时更新、目标频道、CI/CD集成、差异捆绑、可观察性和回滚保护,帮助团队保持符合条件的移动更改保持发布就绪状态,而不将商店审查视为唯一的交付路径。访问 Capgo 评估其更新工作流程如何适应您的现有持续交付管道。

实时更新的Capacitor应用

当一个web层bug在live状态时,通过Capgo将修复推送到用户,而不是等待几天的app store审批。用户在后台接收更新,而native改变仍然在正常的审批路径中。

来自Martin的人性化支持

立即开始

最新博客

Capgo为您提供了创建真正专业的移动应用所需的最佳见解。