跳过主要内容

发布速度:如何衡量和提高它

了解现代软件团队中发布速度的含义,如何使用DORA指标衡量它,以及实用的策略来更快地发布

发布速度:如何衡量和提高它

Elite software teams deploy code about 1,460次,而低效的团队每年部署约 1.5 次,根据 DORA 的 2021 年 DevOps Accelerate 报告。这差不多是 973 倍的发布频率差异,这改变了我们思考软件发布的方式。发布速度不是一个虚荣指标。它表明团队是否能安全地、不间断地将批准的更改转化为用户价值。

移动团队需要一个更精确的定义。一个 Capacitor 应用程序可能包含需要 App Store 或 Play 审核的本机 code,以及一个可以独立更改的 Web 层。如果您仅仅测量二进制提交,您将错过用户体验的更新。实际的问题不是您的团队如何频繁构建应用程序。问题是客户何时接收到功能改进、修复、内容更改或配置更新。

目录

软件团队中的发布速度实际是什么意思

DORA将部署频率定义为核心交付指标,衡量团队如何频繁部署软件到生产环境或终端用户。其benchmark将精英表现者归类为 按需,多次每天部署 类别,而低表现者每六个月部署一次,正如2022年 DevOps状态报告中所述。准确的benchmark不如背后的运营模式重要。高表现的团队将小的发布作为正常工作的一部分,而不是积累变化到风险性批次。

一张图表,显示精英软件团队比低表现团队的发布频率高出208倍。

发布速度 是指团队从提交的code到实时体验的时间间隔。这个旅程包括审查、测试、打包、部署、滚动部署、采用和恢复。快速的构建管道有帮助,但它并不能自动产生快速的客户反馈循环。

为什么移动计算会改变计算

Web团队可以直接将JavaScript更改部署到基础设施并立即使其可用。移动团队面临着不同的依赖链条。Native更改可能需要一个新的二进制文件、商店提交、审查、批准、发布和用户采用。一个团队可以快速完成修复,但仍然需要等待用户安装的应用程序能够接收它。

这条区别对于Capacitor、Ionic和Electron团队来说很重要。他们的应用程序经常结合native能力、HTML、CSS、JavaScript、资产和配置。将每个更改视为二进制发布会迫使简单的界面或逻辑更新通过最慢的路径。

实践规则: 衡量code更改到用户接收预期体验的时间,而不是仅仅衡量从提交到构建完成的时间。

一个有用的运营模型将 二进制发布频率发布体验频率分开。二进制发布频率告诉你团队如何高效地处理native打包和商店合规性。发布体验频率告诉你用户接收有意义的更改的频率。这种区别属于更广泛的 运营效率实践,因为管道可能会忙碌地工作,而客户却看不到任何进展。

目标不是绕过平台规则或推送任意可执行行为。它是将合格的web层更改通过适合这些更改的交付机制进行传递,同时将native功能保持在正常的商店过程中。

发布频率的核心指标

发布频率是开始讨论的起点,但它无法单独描述发布的性能。DORA将其定义为部署的频率,或者它们之间的时间间隔。其当前框架包含 五个核心指标,包括重工率,用于跟踪用于修正早期更改而不是交付新价值的努力。使用 DORA指标指南 来保持团队之间的定义一致。

跟踪速度和稳定性

这些指标作为一个系统工作:

  • 发布频率 衡量变化到生产环境或最终用户的频率。
  • 变更的领先时间 衡量从code提交到部署所需的时间。
  • 发布失败率 衡量部署频率导致失败、回滚或修复的频率。
  • 恢复平均时间 衡量团队恢复服务的速度,尤其是在生产环境中发生故障时。
  • 重工率 显示交付能力中用于修复早期变更而不是交付新价值的交付容量。

移动团队需要通过交付路径来解释交付时间。JavaScript或资产变更可能已经准备好供用户使用,而原生变更仍然在二进制管道中。将两条路径合并到一个仪表板中可能会使一个有能力的团队看起来很慢,并掩盖了应用商店审查瓶颈。

历史DORA等级提供了有用的词汇。精英表现者可以在多次部署中按需部署。高表现者从每月一次到每周一次不等,中等表现者从每六个月一次到每月一次不等,低表现者根据2022年DORA报告的数据,每六个月一次部署一次或更少。 这些等级描述了交付能力。它们不是不考虑风险、团队大小或二进制发布和实时Web层更新之间的差异而要追求的目标。使用一个暴露交易-offs的仪表板

没有失败和恢复数据的发布频率图表可能会奖励风险批处理。没有交付时间的失败率图表可能会隐藏一个避免交付的团队。跨平台团队应该将原生二进制发布与实时Web层更新分开,并且也要跟踪更新采用、回滚事件和重工。

DORA 2022报告

性能等级 发布频率 变更时间 变更失败率 恢复时间
精英 按需,多次发布 跟踪发布流程 跟踪稳定性基准线 跟踪恢复速度
每月到每周一次 跟踪部署流程 作为稳定性基准线 跟踪恢复速度
中等 每半年到每月 跟踪部署流程 作为稳定性基准线 跟踪恢复速度
少于每半年 跟踪部署流程 作为稳定性基准线 跟踪恢复速度

不要为未测量的指标创建基准。建立基线,分离本机和网层变化,检查是否更快的交付也带来更小的批次、可管理的故障和更快的恢复。对于构建更广泛工程输出视图的团队,这个 开发者生产力指南 提供了一个补充参考。

二进制节奏与发布体验频率

二进制发布是通过商店提交或通过已批准的桌面渠道分发的应用程序包。 发布体验频率 是用户接收影响他们看到和做什么的变化的频率。这些指标重叠,但它们不是可互换的。

一个月的二进制节奏可以与频繁的网层交付共存。一个Capacitor团队可能会将本机插件、权限、OS集成和更新器更改保留为二进制发布,而将合格的JavaScript、CSS、复制、配置和资产更新通过控制的实时更新路径发送。二进制数字描述打包工作。体验数字描述产品迭代。

比较二进制应用商店更新节奏与软件发布的连续网层交付的图表。

为什么一个移动数字不够

应用商店评论引入了延迟,这些延迟后端团队在同样的程度上没有面临。 移动发布速度分析来自Digia 描述了商店评论作为介绍 24到48小时的延迟 并认为移动团队应该单独跟踪二进制发布频率和发布的体验频率。用户采用创建了另一个延迟。即使经过审批,用户也可能不会立即安装新二进制。

这创造了一个常见的测量失败。团队可能会频繁提交二进制文件,但大多数客户仍在运行旧版本。如果产品团队仅仅测量提交,可能会声称用户没有体验到进展。

将每个变化路由到正确的路径

使用二进制管道进行需要原生打包的变化。使用特性标志、远程配置、内容分发和签名的Web层更新进行不需要新二进制的变化。目标不是强制每个更新通过无线机制。目标是停止让商店成为不需要新二进制的变化的默认门户。

应用更新的使用频率分段 可以帮助团队区分谁接收更新、什么时候接收更新以及更新是否达到活跃用户。这些数据使发布体验频率比简单的发布日历更有用。

实用策略加速您的发布管道

释放速度会提高,当团队移除等待、重复的手动工作和不必要的耦合时。首先测量每个发布花费的时间。手动签名、原生依赖安装、串行测试、批准手动传输和全包传输需要不同的修复,因此将它们视为单独的瓶颈。

自动化机械工作

可靠的CI/CD管道从已知的提交构建、安装固定依赖项、运行测试、生成签名的艺术品并发布它们,而不重复本地步骤。并行化独立测试套件并在支持它的构建系统中缓存原生依赖项。保持阶段和生产配置结构一致,因为环境不匹配可能会在过程的后期阻止发布。

自动化改变了所有权而不是改变时钟。没有它,一位开发人员协调签名、构建、批准和发布。有了它,管道执行可重复的工作,而开发人员则审查结果并处理异常。

差异更新解决了一个单独的浪费来源。如果仅部分Web包改变,发送更改的文件而不是全包可以减少传输工作并使实时交付在受限连接上更为实际。然后,艺术品反映了实际的更改表面,而不是再次打包每个未变更的资产。

减少风险而不创建QA队列

基于频道的发布分离内部测试、早期访问和一般可用性。测试环境可以先接收更新,beta环境可以将其暴露给选择的用户,生产环境可以在行为监测显示可接受行为后再接收更新。这使得验证与较小、可观察的受众相关联,而不是一次性批量积累并在晚期批准时验证。

功能标志在应用内部添加控制。开发人员可以合并code而不激活完整体验,然后为定义的受众启用它并监控错误和行为。这样可以支持较短的分支并让团队在不重建原生二进制文件的情况下禁用问题体验。

有关测试覆盖率和性能验证的指导,请参阅 PageSpeed Plus测试策略文章 在自动化部署门控之前。

一幅图表,展示了使用自动化、测试和部署加速软件发布管道的三个步骤。

一个实用的管道可以按照以下顺序运行:

  1. 提交并验证: 为每个相关变更运行 linting、单元测试、打包检查和安全检查。
  2. 发布到受控频道: 将 artifact 发送到测试环境或 beta 环境,带有清晰的版本历史和受众规则。
  3. 观察并推动: 评估采用、失败和用户报告,确保发布的相同artifact到生产环境之前。
  4. 恢复时请谨慎: 保持已知的良好版本,以便回滚不需要另一次存储提交。

观看工作流程的演示:

部署自动化指南 提供了实现这些实践的可重复交付的实施背景。对于Capacitor团队来说,实践上的区别仍然很重要:本地更改仍然需要二进制发布,而合格的web层更改可以遵循受控的实时更新路径并在等待商店审查之前将更新推送给用户。

如何Capgo为跨平台应用提供更快的发布

Capacitor团队可以使用Capgo作为实时更新路径来发布合格的web层更改。开发人员修复了JavaScript错误,构建了web包,并通过CapgoCLI发布了一个签名的更新。更新器可以将包推送到目标设备,应用它在下一次启动时,并在更新失败时保留回滚保护。

一个图表,展示了Capgo工作流程,用于向用户无缝地交付即时的实时移动应用更新。

改变了交付的单位。原生能力仍然遵循二进制路径,但Web层的修正不需要等待新商店包装,尤其是在平台和商店政策边界内。Capgo支持签名的Web包,差异更新,渠道,CI/CD集成,设备日志,采用和失败指标,版本历史和自动回滚保护,根据发布者的产品信息。

将发布控制转变为团队工作流

渠道自然映射到跨平台团队的工作方式:

  • 测试 给内部测试者提供一个隔离的更新流。
  • 测试 支持早期采用者和受控验证。
  • 生产 为团队满意的证据后,服务给广泛的观众。

每个渠道都可以按照自己的节奏前进。也就是说,开发人员可以发布一个修复程序用于内部验证,而不暴露给广泛的观众,然后推广经过测试的包,而不是为每个观众重建它。

回滚同样重要于发布。如果出现严重问题,回滚到之前的包可以给团队提供一个恢复路径,而修复问题的底层问题仍在调查中。这个安全网并没有消除测试或可观察性的需要。它减少了错误的成本,使小规模发布更为实际。

比较两个发布路径

A traditional Capacitor 生命周期通常如下:

  1. 更改 web 和 native code。
  2. 构建二进制文件。
  3. 提交审核。
  4. 等待批准和发布。
  5. 等待用户采用。

一个适合 web 层的 live-update 生命周期看起来不同:

  1. 更改 web 层。
  2. 构建和签署捆绑包。
  3. 发布到受控的频道。
  4. 观察采用和故障。
  5. 推广或回滚。

团队可以使用 Capgo GitHub Actions 集成指南将此工作流连接到自动化管道。重要的结果不是承诺的发布次数。它是将本机发布工作与web层迭代分开,并测量两者的能力。

常见的误解:快速发布

快速发布并不自动意味着质量更低。 通常情况下,较小的变化会给工程师提供一个更窄的调试面板。当发布包含一个专注的变化时,团队可以将回归连接到一个更小的原因集,并回滚一个更精确的单元。这种优势会消失,当团队使用高频率来证明弱测试、不清晰的所有权或糟糕的遥测时。

第二个误解是部署频率本身就定义了速度。DORA 将交付视为一组指标,包括lead时间、变化失败率和恢复时间。一个部署频繁但花费大量时间修复故障的团队并没有建立健康的速度。它只是加速了未完成的风险的移动。

速度而没有恢复只是更快地走向更长的停机时间。

移动团队经常说商店评论使改进不可能。商店评论限制了二进制发布,但它并没有定义每个用户可见的变化。有用的区分是变化是否属于本机code还是web层。功能标志、远程配置、内容更新和合格的签名包可以缩短后者而不假装本机变化不需要审查。

实时更新也会引发合理的政策和安全问题。团队必须了解苹果和谷歌的规则,限制传递到允许的内容和行为,签署和验证捆绑包,保护频道,并维护一个清晰的回滚路径。实时更新系统不应成为运送禁止执行行为的隐蔽方式。

最后一个误解是,观察性可以等到团队速度变快后再进行。然而,这是不可能的。每台设备的日志记录,版本历史,更新采用率,失败信号和回滚控制告诉你用户是否接收到了预期的发布。没有这些证据,高更新次数对产品价值或运营健康说了什么也没什么意义。

提高发布速度的行动计划

首先进行测量,然后移除等待的最大来源。将原生二进制发布与web层更新分开在你的仪表板上,记录每条路径的领先时间,并跟踪失败和恢复与频率一起。这样可以防止团队优化一个单独的数字,而客户体验仍然很慢。

第一阶段快速胜利

  • 上下文:Capgo Builder/原生云构建产品页面。角色:短的UI标签或导航项。消息键`native_build_builder_credit_first` (原生构建构建者信用第一)。 自动触发:
  • 从仓库而不是开发人员的笔记本电脑上运行验证和构建作业。 标准化版本号:
  • 使用一致的版本号方案,使团队能够识别变化并确定用户接收到的 artifact。 创建一个测试频道:
  • 给内部测试者一个不需要广泛分发的控制路径。 记录谁可以暂停、推进或回滚更新。
  • 查看批次大小: 在发布管道之前将大变更分解。

下一个投资是架构性的。确定哪些变更需要二进制文件,哪些可以通过 Web 层传递。添加差异化打包,引入渐进式渠道,并将交付事件连接到可观察性系统。仪表板应该回答谁接收了更新,是否失败,以及团队恢复安全版本的速度。

长期来看,产品和工程领导者需要奖励 交付频率,而不是仅仅版本号的活动。较小的发布创建了更紧密的反馈循环,但只有当团队保护稳定性,保持回滚程序,并将恢复视为交付的一部分,而不是异常事件时才会如此。

在当前冲刺中使用此清单:

  1. 分离二进制 cadence 与交付频率。
  2. 自动化构建、测试、签名和发布路径。
  3. 在扩展生产交付之前建立预发布和测试渠道。
  4. 添加采用、失败和回滚可见性。
  5. 与单独追求部署频率不同的是,软件团队应该一起评估DORA指标。

每个完成的反馈环节都会为下一个改变提供信息。移除一个瓶颈会改善下一个周期,尤其是当团队可以快速部署更小的改变、观察它们并在不重建整个应用程序的情况下恢复时。


Capgo为Capacitor和Electron团队提供了一个签名的Web层包、差异性交付、通道、可观察性和回滚保护的受控实时更新路径。如果App Store的审查正在拖慢符合条件的修复和体验变化,请访问 Capgo 评估它如何融入您的发布管道。

Live updates for Capacitor apps

当 Web 层面的 bug 活跃时,通过 Capgo 发布修复,而不是等待几天的应用商店审批。用户在后台接收更新,而原生变化仍然在正常审批路径中。

来自 Martin 的人性化支持

立即开始

最新博客文章

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