跳过主要内容

CI/CD集成指南:快速发布

了解CI/CD集成和管道如何将code连接到更快、更安全的应用程序部署。

马丁·多纳迪

马丁·多纳迪

内容营销

CI/CD集成指南:快速发布

CI/CD集成是连接您的code存储库到自动化管道的线路,使每个更改在不进行手动交接的情况下通过构建、测试和发布阶段。到2024年, 开发人员中有83% 参与 DevOps 相关活动的团队,使用 CI/CD 工具与更好的交付性能相关联,包括部署频率、领先时间、变更失败率和恢复服务时间 根据 Cloud Native Computing Foundation 的 CI/CD 报告.

如果您领导一个移动团队,您可能会感觉到“构建通过”和“应用程序安全发布”的差距。发布可能在 Slack 中看起来很好,但在 11 点时,需要正确的签名密钥、正确的 branch、正确的商店清单和正确的回滚路径时,它会在某个地方崩溃。CI/CD 集成不再是一种噱头,而是团队发布的运营系统。

目录

每个人都想忘记的发布日

星期二上午,开始修复一个原本简单的热修复。到了星期五晚上,这个修复仍然停留在分支中,因为手动QA发现了一个新的问题,发布说明还未完成,Slack上有三个人在问谁有最新的构建。晚上11点,on-call工程师重新运行发布脚本,然而没有人确定在staging中的artifact是否与源代码控制中的匹配。

CI/CD集成的目的不是仅仅自动化几个任务,而是连接 源代码控制, 构建服务器, 测试运行器, 存储库部署目标 形成一个流程,使每个提交都可以独立前进。红帽关于CI/CD的概述 Red Hat 描述了这作为一个自动化的 DevOps 工作流程,通常包括构建、测试、扫描、打包、推广和部署。

什么会破坏当电线缺失时

当团队将 CI/CD 视为单个工具时,他们通常会获得部分自动化,并仍然保留风险的交接。Code 得到了合并,但仍然需要有人启动构建。构建完成,但需要人类复制 artifact 到某个地方。阶段发布正常,但生产需要不同的脚本、不同的凭证和不同的记住如何将所有内容放在一起的人。

实用规则: 如果发布依赖于记忆、侧聊或“知道脚本的人”,管道还没有集成。

Cloud Native Computing Foundation 的 2024 年报告还警告说,使用多个相同类型的工具会损害交付性能,因为互操作性会变得更加困难 CI/CD 的状态报告. 在大型团队中,这很重要,因为集成不是拥有更多工具,而是让工具同意相同的真相。

健康的 CI/CD 设置给你从提交到用户的单一路径。弱的设置给你一个岛屿的集合,每个岛屿都有自己的手动桥梁。差异最快地在发布日出现,正是在团队最不需要混乱的时候。

分解 CI 和 CD

一个图表,说明了软件开发管道中的连续集成和连续交付的概念。

一旦将想法分开,发布流程就变得更容易理解了。 CI CI CI focuses on keeping validated code ready for release, then deciding whether production receives that code with or without a human approval step.

持续集成从一个简单的习惯开始,保持变化小并及时验证。软件术语中,每次提交或合并请求都会触发自动检查,以便在大规模发布之前,不会有破坏__CAPGO_KEEP_0__。这与忙碌的厨房保持食材分类和检查前服务启动的原理相同,只不过这里的“准备”是构建和测试自动化,而不是切好的蔬菜。

Continuous integration starts with a simple habit, keep changes small and verify them right away. In software terms, every commit or merge request triggers automated checks so broken code does not sit around until a large release tries to expose it. That is the same reason a busy kitchen keeps ingredients sorted and checked before service starts, only here the “prep” is build and test automation instead of chopped vegetables.

Red Hat的CI/CD指南 与该模型相符。CI是自动化的构建和测试 discipline,早期捕捉到集成问题。较小的变化更容易验证,当某些内容失败时,团队可以不猜测哪个发布部分引起了问题而追踪它。 CD有两个含义,团队混淆了它们

持续交付意味着__CAPGO_KEEP_0__始终可部署,但仍由人决定何时发布。持续部署进一步一步,自动部署每次通过的变化。这种区别对于合规性、风险承受能力和移动和桌面团队通常需要的发布控制很重要。

Continuous delivery means the code is always deployable, but a person still decides when production happens. Continuous deployment goes one step further and ships every passing change automatically. That distinction matters for compliance, risk tolerance, and the kind of release control mobile and desktop teams usually need.

在一个消费者应用的发布经理可能更喜欢持续交付,因为商店的时间仍然需要协调。一个强大的自动化检查的后端团队可能会选择持续部署低风险服务。正确的选择取决于治理,而不是口号。

试图在自动发布之前加强CI的团队 这本CI专注的指南 是CI侧的有用伴侣。它保持了集成质量的焦点,这是发布可靠性的起点。

CI/CD阶段的比较 Web应用 CapacitorJS移动 Electron桌面
触发 推送或合并请求开始验证 推送或合并请求开始验证 推送或合并请求开始验证
构建 打包应用 打包 web code,然后将其包装在本机 shell 中 编译主和渲染器 code,然后打包桌面应用
测试 单元、集成和 UI 测试 添加 wrapper 和运行时行为的移动设备特定检查 添加打包和应用启动路径的桌面设备特定检查
发布 部署到托管或应用运行时 发布到商店通道或实时更新通道 发布安装程序或实时更新通道
审批 可选人工门控 常用于存储和回滚控制 常用于签名和分发控制

CI/CD pipeline的解剖

一个图表,展示了软件开发CI/CD pipeline的六个顺序阶段,从源代码到生产环境。

A pipeline is just a graph of jobs with inputs and outputs. Once a developer pushes code, a webhook or merge event triggers the first job, then the next job consumes the artifact from that stage, and so on until the release is ready. That’s why CI/CD integration is really a contract between stages, not a mysterious platform feature.

每个阶段都在做什么

The source-control trigger starts the flow. Build jobs compile the code and resolve dependencies, which is where a lot of hidden breakage shows up. Test jobs then run unit, integration, and UI checks, while security scans look for vulnerable packages or unsafe configurations.

一个好的pipeline会快速失败,并且会告诉你它失败的位置。

之后,打包任务会将验证的输出转换为可部署的形式,如容器镜像、签名的APK或IPA、Electron可执行文件或JavaScript bundle。 HCL CI/CD采用和实施概要 因为它展示了团队如何常常在部分自动化中停滞不前。许多团队有管道,但并不是每个阶段都完全连接。

阶段边界的重要性

如果无法在每个交接点命名 artifact,调试就变成了猜测。如果在发布阶段失败,需要知道问题是否来自依赖解析、易碎测试、安全策略还是打包。

这也是为什么好的管道设计包括从提交到 artifact 到环境的内部追踪的原因。 想了解构建部分如何融入更大的流程的团队 这个构建为焦点的指南

值得一看。它有助于将构建阶段的责任与发布orchestration的责任区分开来。

移动和桌面应用的 CI/CD 有什么不同 Web pipeline 会让人误以为 CI/CD 主要是关于将 bundle 推送到服务器。, you still build web code, but you also package it into a native shell, then manage signing and platform-specific release paths. With 使用CapacitorJS

What changes once the app ships to devices

移动团队需要考虑签名密钥、App Store 和 Play 评审,以及实时更新通道。桌面团队则需要处理安装程序、code 签名以及跨平台的更新行为。共享的模式是明显的,但code 可能会通过相同的仓库和构建触发器进行传递,但发布面板是不同的。

The GitHub 提供的CI/CD管道升级指南 指向阶段性测试、特性标志和回滚检查点,这与这种世界观非常匹配。这些实践在构建被包裹在安装程序或包装器中时尤其重要,因为发布不仅仅是“code 是否编译”,而是“这个包是否在真实设备上安全地运行。”

What mobile and desktop teams add on top

Web发布通常可以在 staging 或 production 部署时停止。移动发布通常需要额外的层次来处理通道、审批和回滚行为。Electron 团队需要同样的纪律,但使用桌面包装和更新分发代替 App Store 提交。

  • CapacitorJS mobile: Web 包装、原生包装、签名、商店评审和实时更新通道
  • Electron desktop: 主进程构建、渲染器构建、打包安装程序、签名和更新通道控制
  • Web app: 构建、测试、打包、部署和监控

如果您的构建可以生成捆绑包,那么您的发布系统仍然需要决定如何安全地将其传递给用户。

核心组件使集成工作

触发器、管道、工件和环境是团队重复学习的四个难题。触发器是启动工作的事件,通常是 Git 推送或合并请求。管道是有序的工作集。工件是经过验证的输出。环境是输出被推广或保留的地方。

四个组件的简单语言

触发器是 Git 和自动化之间的握手。管道定义了运动规则,首先构建,然后测试,然后扫描,然后打包,然后发布。工件携带了工作的结果前进,这就是为什么同一个捆绑包应该被测试和部署的原因。

环境给您一个安全的地方来分离意图和影响。开发、测试、beta 和生产在这里做了真正的工作。它们让团队在一个地方证明一个改变,然后在另一个地方的用户依赖它之前。

经验法则: 如果一个环境无法追溯到一个提交和一个工件,那么它就是一个风险,而不是一个安全网。

Capgo 在实时更新流程中的位置

对于CapacitorJS和Electron应用,Capgo位于实时更新层,用户可以将签名的Web包发布到频道,更新可以差异化,回滚可以将设备恢复到最后一次已知良好的包。这使管道成为一个比二进制发布路径更为复杂的发布控制平面,用于native应用中的Web资产。

Capgo的管道集成,包括GitHub Actions、GitLab CI/CD、Azure DevOps和Bitbucket Pipelines等系统的集成文档,用于自动化从CI到基于频道的发布的构建和部署流程。如果您正在比较发布工具与工作职责或平台期望,高级团队通常希望工程师能够了解从头到尾的集成,而不仅仅是构建脚本。一个具体的例子是Coinbase软件工程师在Blockchain Jobs上的集成职责,反映了发布管道在实际组织中的重要性。 对于密钥管理,__CAPGO_KEEP_0__关于在CI/CD管道中管理密钥的指南

是环境部分变得不那么抽象的配套参考。重要的是流程,自动化构建,签名包,目标频道和控制推广。 Capgo’s guidance on managing secrets in CI/CD pipelines 安全性在CI/CD中是一个控制问题,而不是一个复选框。美国国防部对CI/CD环境的指导将管道视为一个必须保护存储库、构建系统、凭据和工件路由的受保护路径。

__CAPGO_KEEP_1__

__CAPGO_KEEP_0__ CI/CD 环境防御指南. 在产品团队中,这种框架也很有用,因为你信任的管道是最快的管道。

属于流程中的控件

短期凭证如果token泄露会减少损害。签名的艺术品有助于证明包或二进制来自预期管道。SBOM和SCA检查在发布前暴露依赖风险,审计日志使每个动作在审查员要求知道什么变化和谁批准时可追踪。

The 美国CISA和DHS关于CI/CD管道防御的指南 强调安全扫描、日志记录、签名配置和减少凭证存活时间应在管道本身。对于金融、医疗保健和电子商务等受监管团队来说,这是正确的思维模式。

安全性添加后,发布仍应快速

团队通常会惊慌,想象一堆手动门控。那样不是必要的。

管道中可以存活策略,审批可以限制到正确环境,扫描可以自动运行而不必将每个发布变成会议。 一些团队还选择发布签名包作为交付链的一部分,这样就可以保持从构建到设备的完整性检查。关于这一点的实际方面的更深入的看法, 这个CI/CD安全指南

发布后故障排除和可观察性

看不到管道的管道就不值得信任。一个失败的构建通常会引发一个简单的问题:它在哪里出错了。一个失败的发布会问一个更难的问题:失败是来自打包、环境漂移还是更新本身。因此,观察性必须覆盖构建路径和发布路径,因为两者都可能引入看起来类似的问题。

关注的信号

构建日志告诉你哪个任务失败了。测试抖动模式显示问题是否出现在code还是周围的基础设施中。部署健康状况告诉你发布是否顺利通过了门户。CNCF报告中的DORA透镜,部署频率、lead时间、变更失败率和恢复服务时间,仍然为团队提供了判断系统是否有帮助的实用方法。 CI/CD报告.

如果你无法在几分钟内回答“什么改变了,哪里改变了,哪些设备”你的观察性太浅了,无法满足实时更新工作流。

发布时发生问题时要检查什么

首先将失败的发布与提交历史进行关联。然后检查引入故障的阶段的测试和部署日志。对于实时更新,设备级别的遥测很重要,因为同一个包在不同设备类别、操作系统版本或应用状态下可能表现不同。

Capgo的每台设备日志、采用率指标、版本历史和通道防护措施都是为此类事件审查而设计的。 Capgo关于在CI/CD管道中添加警报的指南 展示如何将这些信号转换为通知,而不是等待用户报告问题。

CI/CD集成是一个成熟度之旅,而不是一个复选框。

通常会有基本的配置好后再添加安全、发布orchestration和回滚discipline。

CI/CD成熟度之旅的三个阶段从基础到高级的图表。

快速自我检查有助于了解当前的状态。

触发器是否自动化? artifact是否签名? 是否可以追踪部署到一个提交?


Capgo helps teams wire CI/CD into live update delivery for CapacitorJS and Electron apps, so signed bundles, targeted channels, and rollback protection become part of the same release flow. If your team is trying to move from manual releases to a controlled update system, visit Capgo帮助团队将CI/CD集成到CapacitorJS和Electron应用的实时更新发布中,签名的捆绑包、目标通道和回滚保护成为同一个发布流程的一部分。如果您的团队正在尝试从手动发布转换为受控更新系统,请访问Capgo 看看它如何融入您的流程中。

Capacitor实时更新

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

立即开始

最新博客文章

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