Close

持续交付

持续交付 (CD) 是一种在短迭代中借助自动化发布软件的实践

什么是持续交付?


持续交付是一种方法,即团队以自动化的方式频繁且可预测地将高质量的产品从源代码存储库发布到生产环境。

一些组织通过将产品从一个团队移交给另一个团队来手动发布产品,如下图所示。通常,开发人员处于这一范围的左端,而运营人员则在接收端。这在每次交接时都会造成延迟,从而导致团队沮丧和客户不满意。该产品最终会经历一个繁琐且容易出错的过程,从而延迟了创收。

图 1:向客户手动发布产品
手动发布步骤:开发、质量保证、工具、基础架构、平台、发布、InfoSec

现在,查阅下的方持续交付管道。它说明了开发人员如何在笔记本电脑上编写代码并向源代码存储库(如 Bitbucket)提交更改。我们所说的代码,是指被测系统、测试以及用于部署和维护系统的基础架构。Bitbucket Pipelines 可以将产品从测试阶段交付到试运行再到生产,并帮助客户获得这些闪亮的新功能。

图 2:执行自动发布的持续交付管道
持续交付管道步骤:开发人员、笔记本电脑、Bitbucket、Bitbucket 管道、客户

持续交付是如何运作的?


持续交付管道可以在生产前立即设置手动闸门。手动闸门需要人工干预,您的组织中可能存在需要手动进入管道的情况。有些手动闸门可能有问题,有些则可能是合法的。一种合法的情况允许业务团队做出紧急发布的决定。每次冲刺后,工程团队都会准备好产品的可交付版本,业务团队会做出最后的决定,将产品发布给所有客户、各阶层人群,或者可能向居住在特定地理位置的人发布产品。

流经管道的产品的架构是决定持续交付管道结构的关键因素。高度耦合的产品架构会生成复杂的图形管道模式,在最终投入生产之前,各种管道可能会纠缠在一起。

产品架构还会影响管道的不同阶段以及每个阶段产生的构件。管道首先制造组件,即产品中最小的可分发和可测试单元。例如,管道构建的库可以称为组件。这是组件阶段。

松散耦合的组件构成了子系统——最小的可部署和可运行单元。例如,服务器是一个子系统,容器中运行的微服务也是子系统的示例。这是子系统阶段。与组件相反,子系统可以启动并进行测试。

因此,在应将整个系统作为一个整体发布的情况下,可以让管道使用松散耦合的子系统组装系统。这是系统阶段。

我们建议没有将子系统组装成系统的这种组合,参见图 3 中的示意图。

图 3:组装成系统的子系统
子系统图

这种全有或全无的方法会使最快的子系统以最慢的子系统的速度运行。“链的强度取决于其最薄弱的环节”,我们经常用这句话来警告那些成为这种架构模式牺牲品的团队。

一旦通过验证,组装后的系统便进入生产阶段,无需进行任何进一步的修改,进入最后阶段,即生产阶段。

请注意,这些阶段比物理阶段更合乎逻辑,创建这些阶段只是为了将一个大问题分解为多个较小的子问题。您的阶段可能会更少或更多,具体取决于您的架构和要求。

没有质量的速度对我们的客户来说毫无用处。持续测试是一种将自动化测试与软件交付管道集成,并验证其中每一项变更的技术。测试在管道的每个阶段执行,以验证该阶段产生的构件。单元测试和静态代码分析在管道的组件阶段验证组件。功能、性能和安全测试在子系统阶段验证子系统。集成、性能和安全测试在系统阶段对系统进行验证。最后,冒烟测试在生产阶段对产品进行验证。

代码审核插图

自动化测试与管道集成

单一的产品架构或“大泥球”可能会产生“大测试球”。我们建议投资微服务,以便可独立部署的构件可以流经管道,而无需高度集成的环境进行认证。此外,可独立部署的构件使速度更快的团队不会被速度较慢的团队困扰。

持续交付的价值


软件交付管道本身就是一种产品,应该是企业的优先事项。否则,您不应通过它发送创收产品。持续交付通过三种方式增加价值。它提高了软件开发团队的速度、生产力和可持续性。

火箭插图

速度

速度意味着负责任的速度,而不是自杀式速度。管道旨在向客户交付优质产品,除非团队纪律严明,否则管道只能更快地将错误的代码投放到生产环境中!自动化的软件交付管道可帮助组织更好地应对市场变化。

代码管道插图

工作效率

当繁琐的任务(例如为进入生产的每项变更提交变更请求)可以由管道而不是人工执行时,生产力就会激增。这让 Scrum 团队可以专注于让全世界赞叹不已的产品,而不是将精力花在物流上。这可以使团队成员更快乐、更多地参与工作,并希望在团队中待更长时间。

决策插图

可持续性

可持续发展是所有企业的关键,而不仅仅是科技。“软件正在吞噬世界”已不再正确——软件已经吞噬了世界!归根结底,每家公司,无论是医疗保健、金融、零售还是其他领域,都使用技术来脱颖而出并超越竞争对手。自动化有助于减少/消除容易出错且重复的手动任务,从而使企业能够更好、更快地进行创新,以满足客户的需求。

谁应该持续交付?何时进行?


什么时候是采用持续交付的好时机?昨天。
团队需要一个按优先顺序排列的待办事项列表,其中:

  1. 持续交付已被接受,而不是置于后台
  2. 用户故事的验收标准明确提到了自动软件交付方法,而不是手动交付方法
  3. 冲刺完成的定义 (DoD) 可防止团队在产品手动交付的情况下完成冲刺

持续交付是正确的做法,有时需要拥护者快速启动转型。最终,如果设计得当,持续交付管道会为自己付出代价。

那么,谁参与其中?

一些组织让没有经验的人员来设计和实施持续交付管道,并艰难地了解到其中涉及深刻的复杂性。任命初级成员向团队发出了错误的信号,这意味着持续交付的优先级较低。我们强烈建议让一位对技术和业务有着深厚了解的资深架构师负责。

超越持续交付


无论您在持续的一切(集成测试交付部署、分析等)的旅程中处于哪个阶段,它既不是清单,也不是目标,并以持续改进作为核心。

迟早,在构建持续交付管道时,组织中的每个人都会接到电话。高管、工程、产品管理、治理、风险、合规、InfoSec、运营、法律以及您所拥有的一切。管道穿过孤岛并打破阻碍。不管怎样,我们所有人都是这种转型的一部分,持续的每个人都是新常态!

CI/CD 入门

要练习 CI/CD,您可以使用自动开发、部署和测试的工具。特定工具提供集成,其他工具提供开发和部署,剩余工具则提供测试。

Atlassian 提供 Open DevOps 解决方案,提供包括 CI/CD 在内的端到端 DevOps 流程。团队可以使用许多 CI/CD 工具,包括 Bitbucket Pipelines,这是一项内置于 Bitbucket 中的集成 CI/CD 服务。此项服务支持您根据存储库中的配置文件自动构建、测试甚至部署代码。Open DevOps 还与其他 CI/CD 工具集成,包括 Harness、GitLab、JFrog、Codefresh 和 CircleCI。

以下是我们的 Open DevOps 集成的详细介绍。请务必查阅我们的 DevOps CI/CD 教程

持续交付插图