跳过主要内容

持续交付管道启用的内容

了解持续交付管道启用的内容,从自动化测试和更安全的发布到更快的恢复和真实的发布指标,团队可以

持续交付管道启用的内容

A release starts with a green staging environment and ends with a missing migration, a broken feature flag, and an on-call engineer staring at production logs late at night. The team didn’t lack effort. It lacked a dependable path that could test, release, observe, and reverse a change without relying on memory and heroics.

这条路径是 持续交付管道 提供的。它不保证 bug-free 软件或消除每个生产事故。它将发布工作转换为可重复的操作过程,较小的变化通过自动检查、控制暴露和可测量恢复移动。要了解 持续交付管道启用的内容,请从它移除的具体痛点开始。

目录

{"text":"再也不用担心的发布日"}

{"text":"周五下午是发布看起来最安全的时候。阶段已经通过了手动检查,产品经理希望在周末之前修复,大家都同意这个变化很小。"}

{"text":"生产流量却不同意。数据库迁移没有按照预期顺序执行,特性标志的默认值不正确。第一批客户报告出现了支付错误和空白屏幕,随后是Slack中的紧急消息序列。有人叫醒了on-call工程师,另一个人在部署笔记中搜索,第三个人试图确定是新code还是配置变化导致了问题。"}

{"text":"回滚最终恢复了服务,但不是立即恢复。晚上八点左右,团队已经从聊天记录、终端历史和部分日志中重构了发布。软件恢复了,但大家都为部署付出了中断工作、客户不满和周末的不确定性。"}

一个持续交付管道旨在将这种链条打断成可控的、可观察的决策。它可以构建同一artifact,后者将在生产中出现,运行测试之前推广,应用安全性和政策检查,向有限的受众发布,并在生产信号恶化时停止或反转回滚。管道不知道迁移是否安全,除非团队将安全性编码到测试、兼容性检查和部署规则中。自动化加强了工程学问,但无法取代它。

实践规则: 管道应该使安全路径比紧急路径更容易遵循。

重要的shift是运营性的。发布不再是一种罕见的事件,需要一个满室的紧张的人,而成为了一种通过已知系统的常规变化。AWS描述了部署频率为生产部署的数量,测量窗口范围从每日到每月,而DORA定义为code何时达到生产或部署之间的时间。这些定义很重要,因为它们将“我们经常发布”转化为团队可以观察并通过管道改进的东西。 AWS持续交付指南.

管道的其余价值来自于这种shift。它消除了手动重复,捕捉了早期缺陷,限制了爆炸半径,提供了决策的证据,并为工程师提供了更快的恢复方式,当变化仍然引起问题时。

持续交付管道实际上是什么

A 连续交付管道 是自动化的从 code 变更到生产就绪发布的途径。想象一下一个工厂的assembly line。源 code 是原材料,构建过程将其塑造成一个工件,测试检查结果,预发布验证其在环境中的行为,部署自动化将批准的工件推向用户。

工厂的类比是有用的,因为每个岗位都有特定的责任。管道不应该只是运行一系列脚本并将结果称为交付。它应该创建一个可靠的序列,每个阶段都接收已知的输入,产生证据,并要么推进变更,要么停止它。

自动化背后的阶段

一个实际的管道通常包括这些交接点:

  1. 提交和分析。 开发人员将 code 推送到版本控制。linters、类型检查、静态分析、依赖检查和政策规则在变更推进之前识别问题。

  2. 构建和打包。 系统编译或打包应用程序并创建一个带有版本号的工件。后续阶段应该推进相同的工件,而不是为不同环境重建不同的输出。

  3. 单元和集成测试。 单元测试检查孤立的行为。集成和契约测试检查组件如何一起工作以及是否仍然假设依赖关系。

  4. 工件发布。 A成功的构建将其元数据、版本和完整性信息存储在一个工件存储库中。这使团队能够追踪并推动或回滚它。

  5. 环境升级。 工件通过环境移动,环境越来越接近生产环境。审批门控可以保留在风险需要人类判断的地方,但日常检查应该自动运行。

  6. 自动发布。 部署工具通过定义的策略更新生产环境,连接发布到健康信号,并在发布规则被违反时停止或反转更改。

一个图表,展示了从code提交到生产的连续交付管道的六个阶段。

连续集成不是整个管道。

这些术语经常混淆在一起。 连续集成或CI,关注的是自动合并和验证code。 连续交付 保持成功的变更在生产就绪状态,使组织能够按需发布它。 持续部署 它通过自动将通过定义的检查通过的每个更改发送到生产环境。

团队可以在不为每个构建启用自动生产部署的情况下实践持续交付。这一区别有助于受管制的组织在仍然从自动化测试、工件管理、阶段推广和审计性方面受益的同时保留审批步骤。有关实践如何相互协同的更深入解释,请参阅 CI/CD集成.

The tools might include GitHub Actions, GitLab CI, Jenkins, a container registry, Terraform, Kubernetes, cloud deployment services, or mobile release infrastructure. The tools aren’t the core value. The value is the 持续交付管道中的可重复路径从开发人员笔记本电脑到生产流量从开发人员笔记本电脑到生产流量的可重复路径

,这使得忘记命令或未文档化的更改改变结果的机会减少。

管道的核心能力

管道不仅仅是创造一个好处。它连接了几个相互补充的能力。更快的交付速度在没有质量检查的情况下是不安全的。质量检查在团队无法一致地发布或撤消结果时就没有太大价值。可观察性在部署系统可以根据所见采取行动时才真正重要。

管道的好处

包括速度、质量、生产力和风险减少的图表。 2021 年持续交付报告 发现 31.3% 的开发者每周发布一次到每月发布一次, 27.3% 每月发布到六个月发布一次, 和 10.8% 的精英表现者每天发布多次.

这些数字表明了批处理工作和维护成熟交付路径之间的差距。当团队等待几周才能组合更改时,开发者会花费时间解决冲突并调查不相关功能之间的交互。较小的更改通常会给管道提供更少的测试面和更清晰的答案,当某些内容失败时。

自动质量和安全

管道可以运行单元测试、集成测试、安全扫描、依赖检查和政策验证等每个候选更改。这样就移除了人类必须记住每个检查,尤其是在紧急发布时的脆弱的交接。

结果并不是“测试等于安全”。易碎的测试、不完整的覆盖、不安全的迁移和弱的密钥管理仍然可以破坏过程。管道使这些弱点可见并可执行,这给团队提供了改进它们的机会。

控制发布和反转

灰度发布、蓝绿色部署和特性标志减少了在全面推广之前将更改暴露给用户的用户数量。进步式交付研究报告指出 40% 的恢复时间平均增长 并且系统可用性 高达 99.98% 当阶段性发布、实时指标和回滚模拟结合使用时,正如《经验性渐进式发布研究》中描述的那样 坏的发布可以变成有限事件而不是全面的停机。工程师可以暂停推进、禁用标志或恢复之前的工件,而管道会保留发布记录.

运维和合规的证据

运营和合规性证据

试图将发布自动化与正式变更控制联系起来的组织,一个实用的

变更管理自动化指南 持续交付管道的自动化管理指南 功能标志还提供了另一个层次,通过将__CAPGO_KEEP_0__的发布与用户暴露分离。团队可以合并和验证一个能力,然后在显式发布决策中打开它,而不是将可见性与部署时间绑定。技术介绍

Feature flags add another layer by separating code delivery from user exposure. Teams can merge and validate a capability before turning it on, using an explicit release decision rather than tying visibility to deployment timing. A technical introduction to 简化的持续交付管道 功能标志的实现

更详细地介绍了这一分离。

进步式交付模式的实用化

不应仅仅将预发布门户视为阶段。成熟的团队使用生产控制来决定 如何让真实流量看到变化多久

A 在推广之前 可以雀斟燕尾式发布

将新版本发送到生产流量或基础架构的小部分。系统监测错误率、延迟、崩溃和商业信号, 如果发布保持健康,版本会被推广。如果这些信号恶化,管道会停止或回滚,

功能标志 通过应用逻辑或配置来控制暴露。code可以在功能处于禁用的情况下部署,然后在内部组、测试受众或特定发布频道中启用。标志在风险部分是商业行为而不是基础设施时很有效,但如果团队不删除或管理它们,则会产生运维债务。

模式 如何工作 回滚速度 最佳用途
金丝雀 在健康信号和自动回滚连接的情况下,速度快 基础设施变化和需要验证的实时行为变化 蓝绿
切换流量到两个生产环境之间 切换流量到两个生产环境之间 极速路由时反转干净 遵守法规的切换和发布,需要预先准备的备用方案
特性标志 同时将code部署并控制用户是否可以访问行为 快速应用行为,假设标志服务可用 风险的业务逻辑,逐渐暴露给受众,并与营销协调的发布

没有模式是普遍安全的。 Canary可以减少爆炸半径,而不需要完整的副本环境,蓝绿色提供了更高的基础设施成本的明确环境fallback,标志解耦部署与发布,同时引入配置和生命周期问题。团队经常结合使用它们,例如使用标志来支付规则,使用Canary来平台更改,使用蓝绿色来紧密控制的切换。 阶段性发布与全面的发布比较 提供了另一种评估这些选择的方式。

渐进策略只有在团队在部署之前定义成功时才会起作用。 “看起来不错”不是自动门控。管道需要健康检查,实用的遥测,推广规则和测试的反转路径。

Live Update发布实践

一家移动团队维护着一个CapacitorJS应用程序,包含一个支付流程修复。原生壳子不需要改变,但JavaScript包,样式表和配置值需要改变。开发人员打开一个branch,推送了更改,管道开始了正常的验证路径。

该构建作业运行单元和仪表测试,创建 Web 资产,签署捆绑包,并将 artifact 发布到受控的实时更新通道。团队不需要等待 App Store 或 Play Store 的新审查,因为原生二进制保持不变,更新通过应用程序的捆绑 Web 视图传递。

开发人员正在办公室中工作,手持智能手机,显示成功支付屏幕。

发布过程分为几个阶段。首先,团队将目标设置为内部通道,检查支付完成、无故障会话和更新失败。管道然后将签名的捆绑包推送到更广泛的受众。如果新支付屏幕引起回归,团队可以停止推广或将用户返回到之前的捆绑包,而不是要求每个用户安装新的原生版本。

这就是通常在通用 CI/CD 图表中被忽略的交接。管道不仅仅是绿色构建结束时。它将 artifact 携带到发布服务中,连接到应用程序遥测的发布决策,并保留版本历史,以便解释每个设备接收到的捆绑包。通过此模型工作的团队可以 如何让Live Update为Capacitor工作 在设计自己的发布阶段之前。

该示例还暴露了边界。适用于支持已安装本机 shell 的 web 层更改的实时更新。仍然需要适当的本机分发过程的本地能力、不兼容的平台更改或商店策略敏感的更改。持续交付改进了路径,但它并没有消除平台的约束。

测量管道启用的内容

成熟的管道给工程领导者带来了比绿色勾号更丰富的内容。它产生了有关变化如何快速移动、它们如何频繁引起问题以及团队如何恢复服务的证据。

DORA 的四个交付指标提供了核心词汇。 部署频率 测量code到达生产的频率。 变更时间 测量从提交到部署所需的时间。 变更失败率 测量需要立即干预或回滚的部署比例。 恢复时间 测量服务在生产故障后恢复正常的速度。DORA 的 软件交付性能指标指南 定义这些指标并将其与交付性能联系起来。

一个小团队不应自动优先考虑部署频率。如果恢复速度慢,事件难以诊断,改进 平均恢复时间 可能比通过不稳定的系统推送更多的发布产生更多的运营价值。正确的顺序取决于团队可以观察到的约束。

一个有用的测量集

DORA指标是结果指标。添加一些领先指标,揭示管道健康状况在结果恶化之前:

  • 管道持续时间: 监视那些长到鼓励绕过的构建或测试阶段。
  • 失败部署率: 将应用程序缺陷与基础设施、配置和管道故障区分开来。
  • 回滚次数: 频繁的反转被视为检查测试缺口、发布设计或改变大小的信号。
  • 测试脆弱性: 跟踪那些没有带来有意义的产品缺陷而失败的测试,因为噪音门槛会训练团队忽视失败。
  • 工件可追溯性: 确认生产版本映射回源代码的修订版本及其验证证据。

避免玩弄数字。空白提交可以提高部署频率而不带来价值。高覆盖率可以掩盖未测试的集成路径。低失败率可能意味着团队避免发布。指标应该描述流程,而不是成为脱离客户结果的目标,鼓励行为。

指标 手动基准 持续目标 关注
部署频率 发布发生在批次中,并依赖于协调 通过可重复的推广路径发布版本 空部署或过大的变更包
变更的时间 Code 等待发布窗口或手动交接 从提交到生产就绪的变更流动,排队时间很短 慢速审查、长时间构建和阻塞环境
变更失败率 在发布事件期间或晚期发现故障 通过分阶段发布检测故障并包含故障 由于缺失的迁移或配置检查导致的回滚
恢复的平均时间 恢复依赖于个人知识和手动命令 警报、回滚和回档支持一致的恢复路径 需要重建部署历史的恢复

希望减少周期时间的团队也可以评估 AI策略来更快地发布code,但更快的code生成不会解决弱测试套件或不可靠的部署路径的问题。使用自动化来移除等待和重复,保持工程判断专注于风险和客户影响。关于 发布速度 可以帮助连接交付速度与使速度可持续的控制。

您的30 60 90天管道推出计划

一名工程主管可以从一个狭窄的服务开始,围绕现实的故障模式构建管道。第一个目标不是一个复杂的平台,而是一个可信赖的路径,团队每次使用都能信赖。

第一30天

从版本控制卫生和清晰的定义开始,确定什么可以进入主分支。将构建指令放在仓库中,配置可审查,减少长期存活的分支,避免集成惊喜。建立一个基本的CI工作流程,构建应用程序,运行单元测试,执行静态分析,应用安全扫描。

在此期间,识别当前的手动步骤。将它们写下来,然后首先自动化最安全的重复步骤。如果测试不稳定,修复不稳定性之前不要添加更多的门控。工程师经常绕过的红色管道会传授错误的教训。

通过 60 天

添加一个与生产环境非常相似的环境,以暴露配置和集成问题。将同一 artifact 在各个阶段之间推广,而不是重建它,并在考虑旧和新应用程序版本时排练数据库迁移。

然后选择一个 rollout 控制。一个特征标志可能适用于一个风险的商业规则,而一个金鱼或蓝绿色策略可能更适合于基础设施或平台的更改。将推广和回滚与服务级别警报联系起来,并使之前的已知良好 artifact 易于识别。

通过 90 天

从一个成功的服务转移到一个可重用的模式。添加进步的分发控制,仅在爆炸半径合理时才添加,自动收集批准和 artifact 证据,并通过受控的意外或混沌练习测试恢复。开始报告 DORA 指标,同时与管道持续时间、失败的部署、回滚活动和测试脆弱性一起报告。

常见的错误值得明确的关注:

  • 工具优先投资: 不要在基本测试和 artifact 流工作成之前建立一个复杂的内部平台。
  • 迁移忽视: 不要假设应用程序回滚也会逆转数据库架构的更改。
  • 迟观察: 在生产推广之前添加部署标记、警报和仪表板,而不是在第一次意外之后。
  • 简化报告: 评估领先时间、变更失败率和恢复差异,而不是庆祝原始构建或提交数量。

30-60-90天的连续交付管道实施计划进展的图表。

每周定期检查管道。询问哪个阶段产生了最长的等待时间,哪个失败需要最多的手动工作,回滚是否如预期,DORA-对齐的指标是否有所改变。这种习惯会将管道从一次性的DevOps项目转变为一个更安全的交付系统。


对于CapacitorJS和Electron团队来说, Capgo 提供了签名的实时更新、基于频道的发布、CI/CD集成、版本历史、可观察性和回滚保护等功能。访问Capgo来评估其发布控制是否适合您的管道,并开始设计一个更安全的从合并code到用户的路径。

实时更新Capacitor应用

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

来自马丁的人性化支持

立即开始

最新博客文章

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