跳过主要内容

持续集成的关键优势

了解持续集成的关键优势,了解如何让开发和产品团队更快、更高质量地发布应用。持续集成如何提高速度、质量和降低成本,尤其是对于移动应用。

持续集成的关键优势

发布日通常看起来都一样。有人在监控CI日志,另一个人在检查签名步骤是否仍然有效,开发人员正在尝试解开最后一分钟的合并冲突,产品部门在问是否可以在今天的构建中修复bug。如果您发布移动应用,那么还有一个额外的焦虑层。即使code已经准备好,您也可能需要等待几天才能让用户看到修复。

持续集成的关键优势

CI实践中的好处才是真正的实践,而不是理论。CI并不是为了自身的自动化而存在的。它改变了团队的日常工作方式,特别是当与非本机更改的实时更新路径结合在一起时,移动团队会变得更加有价值。

目录

为什么您的团队需要逃避手动发布

手动发布造成两种损害。可见的损害是深夜的抓狂,共享文档中的清单和发布经理试图记住哪个分支包含热修复。不可见的损害是整个团队适应这种痛苦的方式。开发人员将更长时间保留更改。产品将更多的工作纳入每个发布。QA看到更大的差异和更少的确定性。

移动团队感受到这种痛苦更深。一个破碎的Web发布通常可以快速修复。一个破碎的原生移动发布可以让支持、产品和工程队伍等待审查队列并试图解释他们不完全控制的时间表。这就是为什么发布过程设计与code质量一样重要。

手动发布不仅会延缓交付。它还会训练团队害怕交付。

持续集成改变了运营模式。它将集成作为一个常规习惯,而不是在 sprint 结束时作为一个特殊事件。开发人员更频繁地合并更小的变更。系统构建应用程序,运行测试,并快速告知团队某些东西出了问题。由于变更较小,问题也较小。

这也改变了发布对话。产品可以问‘现在什么是可用的?’而不是‘我们可以安全地将什么塞入下一个发布?’支持人员可以获得更清晰的答案。工程团队可以花费更少的时间重建变更,并花费更多时间决定什么要发布。

对于比较老式工作流程和现代工作流程的移动团队来说,这个权衡变得明显,当你对比 OTA 更新与手动提交到商店。重点不是去掉流程,而是停止使用发布日作为主要质量控制机制。

通常可以追溯到流程的发布痛苦是

  • 大批次: 更多code一次性到达,故障更难分离。
  • 晚期集成: 团队在时间紧迫的情况下发现冲突。
  • 人工验证: 人们会捕捉一些问题,但它们不会与自动检查的一致性相匹配。
  • 延迟恢复: 即使是简单的修复也可能变成另一个风险的发布事件。

CI 工作是因为它直接攻击每个失败模式。

什么是持续集成

想象一下,几个人一起建造一个大型乐高集装箱。一个选择是让每个人在几天后建造大型部分,然后尝试在最后强制这些部分一起。通常在软件集成中失败的方式相同。零件不对齐,某人使用了错误的零件,Nobody知道确切发生了什么时候的错误。

CI 的方式不同。每个人添加更小的零件更频繁地,并且模型不断被检查。模型保持稳定,因为每个添加都在下一个零件堆叠在上面之前被验证。

一张图表标题为持续集成的乐高模型,展示了 DevOps 过程的五个步骤。

核心循环

在实际层面上,CI 是一个可重复的循环:

  1. 开发人员推送一个小的更改到一个共享仓库。
  2. 管道构建应用程序。
  3. 自动化测试运行对该更改的测试。
  4. 团队能够快速获得反馈。
  5. 如果检查通过,code可以安全地合并到主分支。

那一轮听起来很简单,但它会改变团队行为的重要方面。开发人员停止在长期分支上工作。审阅者收到较小的拉取请求。失败更容易追踪,因为改变的code数量有限。团队开始将主分支视为他们积极保护的东西,而不是事后修复的东西。

CI和CD的分界线在哪里

这里,团队经常混淆术语。

持续集成 是关于频繁合并code并自动验证它。
持续交付 意味着经过验证的软件始终处于可发布状态。
持续部署 进一步一步,自动将符合条件的更改部署给用户。

很多混淆来自使用CI作为所有DevOps的缩写。这使得规划变得混乱。如果您的团队说“我们有CI”,但构建只有在手动修复后才会绿色,或者发布依赖于部落知识,您可能只有一部分自动化,而不是健康的CI。

如果您想对发布方程式建立一个清晰的认知模型,这个对持续部署在实践中的解释是有用的,因为它将__CAPGO_KEEP_0__验证与实际交付决策分开。 持续部署在实践中的含义 is useful because it separates code validation from actual delivery decisions.

如果开发者不信任主分支,您的CI系统可能存在,但您的CI实践并不存在。 一个健全的CI设置通常包括几个关键组件:

实践

它做了什么 没有它会发生什么 频繁提交
保持变更小 失败变得更难分离 实践
自动化构建 验证应用程序可以一致地编译 构建故障延迟出现
自动化测试 快速捕捉回归 团队依赖于缓慢的手动检查
快速反馈 保持开发人员的上下文 错误在动力丧失后才被修复

最大的误解是将CI视为工具购买。Jenkins、GitHub Actions、Bitrise、GitLab CI和CircleCI都可以运行管道。它们自己并不能创造好的习惯。CI在团队频繁提交、保持检查相关性并将红色构建视为紧急时才有效。

核心技术优势

CI工程价值在交付的平凡部分体现。减少等待时间。减少猜测。减少巨大的合并。减少“在我的机器上工作”的对话。采用CI的团队通常不会将其描述为令人兴奋的。他们将其描述为令人放心的。

最常被提及的好处是发布速度。经验研究发现,使用CI的项目 release code twice as often 根据Hilton等人在持续集成发布结果的ICSE论文中对开源存储库的研究 .这很重要,因为更快的发布频率通常是更健康的集成习惯的结果,而不是更激进的日历快速反馈改变了开发人员的行为

快速反馈是团队感到的第一个技术胜利。一个在提交后几分钟内失败的测试比在几个不相关的更改落地后发现的错误报告要便宜。开发人员仍然记得他们触摸过的内容。审阅者可以对 diff 进行推理。修复留在本地

这也减少了上下文切换。如果今天的构建失败是您今天写的,那么您可以在问题仍然在您的头脑中时修复它。这比三天后重新打开分支并尝试从提交历史中重构意图要好得多

This also reduces context switching. If a build fails today for code you wrote today, you can fix it while the problem is still loaded in your head. That’s much better than reopening a branch three days later and trying to reconstruct intent from commit history.

学习Django的本地化测试 来确保自动化验证覆盖的不仅是编译成功 发布速度是非CI项目的两倍

减少的整合工作

大型合并冲突显而易见。 隐藏的整合工作更糟糕,因为它直到发布周才会变得可见。 两个功能可能单独编译,同时仍然会破坏对方的假设。 CI 早期暴露这些碰撞,通过强制将整合工作定期推入共享分支。

这导致几个具体的改进:

  • 干净的拉取请求: 审阅者可以专注于意图而不是挖掘。
  • 更安全的重构: 管道在结构性变化破坏下游code时立即提供反馈。
  • 更好的测试纪律: 一旦测试在每次提交时运行,测试不稳定或慢的测试就无法忽视。
  • 减少发布日调试: 团队停止在最糟糕的时刻发现基本的整合问题。

许多团队在将构建、测试和工件创建连接到共享工作流程(如Capgo)后就开始看到这些收益。 自动化构建和发布与GitHub Actions. 实现细节各异,但模式始终一致。自动化检查人们常常忘记或延迟的检查。

小的提交不仅更容易审查。它们更容易信任。

CI确实存在权衡。设计不良的管道可能会变慢、噪音或不稳定。如果测试因无关原因失败,开发人员会停止关注。如果每次提交都触发一个长管道,团队会寻找绕过它的方法。好的CI是有意见的,它保持核心路径快速,推迟更重的检查到合适的阶段,并将管道的可靠性视为产品质量的一部分。

CI如何转化为商业和产品的胜利

工程团队通常以技术术语pitch CI。产品和领导层通常关心不同的问题。我们可以以更少的风险发布吗?当出现问题时,我们可以快速恢复吗?我们可以以更大的信心规划交付日期吗?

CI回答了这些问题,因为它缩短了引入问题和发现问题之间的时间差。

一群来自不同行业的商业专业人士在现代办公环境中庆祝成功项目发布。

减少重做意味着降低交付阻力

根据TierPoint对IBM的行业分析的总结,持续集成显著减少了 平均故障恢复时间 通过在code提交后几分钟内检测错误,降低了重做成本并降低了云基础设施的总拥有成本。 CI 的优点概述. 这就是商业案例的一句话。 早期检测意味着更便宜的修复。

产品经理会感受到可预测性。 他们不太可能因为紧急清理而失去一个冲刺。 支持团队会感受到更清晰的事件处理,因为团队可以识别出什么变化并更快地响应。 财务部门会感受到的就是, fewer 发布问题会转化为更长时间的工程中断。

CI 还有一个软但重要的好处。 CI 减少了发布的情感成本。 那些信任管道的团队会做出更好的决策,因为每次发布都不再像赌博一样。

可预测性有助于产品做出更好的决策

可预测的交付系统会改变路线图行为。 产品可以将工作分解为更小的增量,因为交付不再痛苦。 工程团队可以拒绝风险的捆绑,因为组织不再需要为一个月的事件保存更改。 利益相关者可以要求分阶段发布、补丁发布或快速反转发布而不触发恐慌。

对于增长团队来说,这在核心工程之外也很重要。 市场和平台团队经常需要快速的网站、入门和发布迭代。 当发布速度很重要时,同样的思维方式也适用于相邻的工作流程,例如 通过可重复、可追踪的执行而不是一次性活动来获得高权威的背链。 一个短视频会给出如何影响交付结果的操作纪律的好概述:

CI 的好处概述

CI 的商业价值不仅仅是速度。每次发布都有更少的意外情况。

CI 的代价是提前投入。团队需要编写测试、维护构建脚本、管理易碎的检查、以及达成质量门槛。这些都不是免费的。但是,alternative 是在 deadline 压力、事件响应或用户已经感受到问题时支付相同的成本。成熟的团队宁愿花费精力设计可靠的系统,而不是反复改造一个系统。

从理论到实践 超越 Web 部署

Web 团队经常将 CI 视为主要瓶颈解决方案。构建、测试、部署、监控,完成。移动团队知道这不完整。你可以构建一个严格的 CI pipeline 仍然会被 app store 审核阻塞一个用户需要的变化。

That’s why the benefits of continuous integration look different on mobile. CI still improves code health and release quality, but the final leg of delivery has extra constraints.

https://capgo.app 的截图

可行的移动 CI 设置是什么样的

移动 CI 工作流通常比 web-only pipeline 有更多的移动部分:

  • 共享源代码控制: 每个人都通过同一个仓库和 branch 策略进行集成。
  • 自动化应用程序构建: 管道创建 iOS 和 Android artifact 一致地。
  • 自动化验证: 每次变更时,单元测试、代码检查和目标集成检查都会运行。
  • 签名和打包控制: 敏感的发布步骤被脚本化、审计并且可重复。
  • 发布渠道纪律: 团队将beta、测试和生产路径分开。

许多组织在此停止,并且这仍然比手动发布更好。如果您的团队使用Capacitor,一个实用的参考资料是 为Capacitor应用设置CI/CD。它涵盖了人们在讨论CI时经常忽略的操作侧面。

应用商店瓶颈CI单独无法解决

移动交付有一个结构性的延迟,web团队通常不面临这种问题。根据DevOps.com的数据 72%的移动团队面临3到7天的审查瓶颈和那些将 CI 与热更新服务结合起来的团队相比,仅依靠本地 CI pipeline 的团队速度慢了 50%。 比起依赖本地 CI pipeline 的团队,速度慢 50%。 CI 文献中 95% 的流程没有解决这个问题。 分析为什么持续集成比以往任何时候都更重要。 并非每个移动变化都同样本地化。如果您修复 JavaScript 逻辑、更新文本、调整配置或修复打包的 Web 资产,则 native 存储审查路径可能是整个过程中最慢的部分,即使工程变化本身风险较低。 因此,移动团队的核心问题变得更加狭窄和有用:哪些变化需要通过商店,哪些变化可以通过另一个批准的路径安全地交付? .

That gap matters because not every mobile change is equally native. If you fix JavaScript logic, update copy, adjust configuration, or patch bundled web assets in a Capacitor app, the native store review path may be the slowest part of the process even when the engineering change itself is low risk.

live 更新服务完成了混合移动应用的 CI 循环。CI 还做了基础工作。它构建、测试、验证和产生捆绑包。live 更新系统然后将符合条件的 Web 资产直接分发到设备,而不需要等待新 native 二进制文件的审查。

在这个类别中,有一个选项是

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__ Capgo,它发布了签名的Web包,适用于Capacitor应用,支持发布渠道,集成了CI/CD,团队可以自动化JavaScript、CSS、复制、配置和类似非本机更改的资产交付。它并没有替代本机发布。它缩小了需要提交到应用商店的更改范围。

实践模式如下:

  1. 开发人员将小的更改合并到主分支。
  2. CI 运行构建和自动化检查。
  3. 如果更改影响本机code,团队通过正常的应用商店路径发布。
  4. 如果更改仅限于Web资产,管道发布了适当渠道的更新。
  5. 团队监控采用率、失败和回滚信号。

现场笔记: 移动CI变得更加有用,当它可以区分“需要二进制”和“需要用户获取修复”的情况时。

这种区分使交付感觉连续,而不是仅仅自动化。没有它,移动团队改进了集成质量,但仍然吸收了每个有意义的客户端修复的审查延迟。有了它,管道开始匹配产品和支持所需的速度。

测量和开始您的CI之旅:

CI发布失败时,团队测量管道本身而不是交付结果。绿色构建很重要,但它们不是目标。目标是从提交到客户影响的更健康路径。

最常见的运营模型是跟踪四个DORA指标。它们为工程师和产品团队提供了一个共同的语言来讨论流程和可靠性。

展示四个关键DORA指标的图表,用于衡量持续集成工作流的有效性。

跟踪显示交付健康的指标

指标 它衡量什么 它为什么重要
部署频率 团队成功发布的频率 显示交付是否变得习惯化还是仍然以批处理方式进行
变更的带头时间 提交到生产环境所需的时间 揭示审查、测试、批准和发布处理中的延迟
频率 发布导致服务降级的频率 保持速度与质量的联系
恢复服务所需的时间 服务恢复所需的时间 反映运营能力和发布安全性的指标

对于CI来说,另一个实用的观点是性能反馈。Abstracta指出,CI管道可以在早期启用性能基准测试,检测性能偏差,立即在code变更后减少开发人员上下文切换,因为问题在同一个迭代中得到解决。这是一个强有力的理由,认为性能检查应该作为交付健康的一部分,而不是仅仅作为发布前的QA。

从小处着手,构建有用的管道

不要一开始就自动化所有内容。从开始移除团队已经讨厌的痛苦的手动步骤

一个好的起始序列通常是

  • 选择一个服务或应用 选择一个有活跃开发和可见发布痛点的项目
  • 首先自动化构建: 确保每次提交都能在可重复的环境中产生相同的结果。
  • 添加一个小型测试套件: 从快速的检查开始,捕捉明显的回归问题。
  • 保护主分支: 不要允许破坏性变更进入共享code。
  • 测量基准: 跟踪当前发布周期、恢复时间和失败模式,才能对改进做出声称。
  • 快速解决管道信任问题: 易碎的检查会比缺少检查更快地阻止采用。

如果您的移动管道在基本CI设置后仍然感觉缓慢,问题可能出在构建之外。这篇指南将帮助您解决 OTA管道中的常见CI/CD瓶颈 当瓶颈从集成转移到交付orchestration时,__CAPGO_KEEP_0__很有用。

CI不是成熟度徽章。它是一种纪律。团队在保持变化小、反馈快、发布路径诚实地指出延迟仍然存在时,才能获得连续集成的好处。


如果您的团队发布Capacitor应用并希望CI更快地到达用户, Capgo 是团队可以将管道扩展到非本机更改的控制现场更新的一种方式。它适用于需要签名捆绑交付、发布渠道、回滚控制和发布可见性,而不强制每个修复通过应用商店审查的团队。

实时更新Capacitor应用

当web层bug实时更新时,通过Capgo将修复推送到应用商店,而不是等待几天的审批。用户在后台接收更新,而原生变化保持在正常的审批路径中。

来自马丁的人性化支持

立即开始

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

Capgo应用中的双向通信