前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >持续交付2.0:云原生持续交付

持续交付2.0:云原生持续交付

作者头像
ThoughtWorks
发布于 2018-04-13 10:11:39
发布于 2018-04-13 10:11:39
1.7K0
举报
文章被收录于专栏:ThoughtWorksThoughtWorks

《持续交付》提出了一系列贯穿整个软件交付生命周期的最佳实践。但它成书的年代(2010年)云计算尚未得到广泛应用,尤其在软件开发过程中的应用非常有限。如果站在今天的技术水平和对云计算的理解水平基础上回顾《持续交付》的内容,我们有可能提出一组全新的、原生于云环境的持续交付实践。


软件发布的反模式

《持续交付》中列举了软件发布过程中的一些反模式,这些在行业中常见的不佳实践使软件发布过程容易出错,使软件发布的风险和压力增大。这些与可靠的发布过程相对应的常见的反模式包括:

  • 手工部署软件。靠详尽的发布文档来描述发布步骤及每个步骤中易出错的地方,靠手工测试来确认发布后的应用程序是否运行正确。不自动化的部署过程既不可重复也不可靠,会在调试部署错误的过程中浪费很多时间。
  • 开发完成之后才向类生产环境部署。开发团队认为“开发完成了”,才第一次把软件部署到类生产环境(比如试运行环境)。假如应用程序是全新开发的,第一次将它部署到试运行环境时可能会非常棘手。
  • 生产环境的手工配置管理。通过专门的运维团队来管理生产环境的配置,如果需要修改一些东西,就由这个团队登录到生产服务器上进行手工修改。经常导致部署到生产环境时就失败,尽管多次部署到试运行环境都非常成功。

在云计算的背景下,我们可以看得更远一步:这些反模式如果在今天的研发团队中仍然出现,背后反映的是这支研发团队还不会利用云计算提供给他们的便利能力。

  • 手工部署软件 -> 软件发布形态和流程不标准。因为软件的发布形态多种多样(JAR、WAR、RPM、DEB……),因为软件的功能与配置不解耦,所以才会需要手工部署。而发布形态和发布流程的不标准,背后的原因是计算资源稀缺,需要复用服务器。
  • 部署到类生产环境太晚 -> 开发环境与生产环境不统一。因为开发和测试用的环境与生产环境有很大差异,才会出现部署到类生产环境时的种种困难。开发环境与生产环境的不统一,背后的原因也是计算资源稀缺,生产环境昂贵,无法做到随需可得。
  • 生产环境手工配置管理 -> 环境管理情况复杂。因为环境需要长期使用且不断升级,才有了对环境进行管理的需求。环境需要长期使用和升级,背后的原因是计算资源缺乏弹性,不需要的时候不能随意丢弃。

对于这些反模式,《持续交付》提出的解决办法是“将几乎所有事情自动化”。但在当时的技术水平下,由于软件发布的形态和流程不标准、开发/测试环境和生产环境不统一、环境管理情况复杂,“将发布流程自动化”在每个团队的具体做法都不同,因此持续交付的水平高度依赖于团队的能力与觉悟。《持续交付》也只能苦口婆心地劝说“如果需要执行这个流程数十次的话,就不是那么容易的事了”,而且“不需要把所有的东西一次性地全部自动化……随着时间的推移,最终你可以、也应该将所有环节全部自动化”。

但如果在软件的开发过程中充分利用云计算的弹性能力,这些反模式有可能被根除,而不必由每个开发团队重复地尝试通过自动化来缓解。


部署流水线

《持续交付》提出了“部署流水线”的概念(如下图)。“随着某个构建逐步通过每个测试阶段,我们对它的信心也在不断提高。当然,我们在每个阶段上花在环境方面的资源也在不断增加,即越往后的阶段,其环境与生产环境越相似。”

在充分利用了云计算的情况下,部署流水线会有两方面的改变:

  1. 不存在“所用环境与生产环境的相似度增加”的情况,从提交阶段开始(甚至在此之前的开发阶段),所有环境都与生产环境是一致的。
  2. 由于不需要根据项目拥有的计算资源来定制各个环境与生产环境的相似度,这个部署流水线不再是一个需要由开发团队来实现的概念模型。部署流水线可以是标准的、一致的,开发团队只需要定义自己这个软件的生产环境即可。

《持续交付》中提倡整个部署流水线“只生成一次二进制包”,并且在各个验证步骤之间传递二进制包。只生成一次二进制包的实践是非常必要的,因为“出于审计的目的,确保从二进制包的创建到发布之间不会因失误或恶意攻击而引入任何变化是非常关键的”。但实际的项目中经常出现二进制包非常庞大、在各个步骤(及各个环境)之间传递二进制包很费时的情况,这也是导致一些项目最终仍然退回到每个步骤重新构建二进制包的原因:增量的编译和构建可能比通过网络传递整个二进制包还省时。

如果构建的产物是容器镜像,所有运行时环境都从云上获得,那么实际上不存在传递二进制包的过程。每个验证步骤都用指定版本的容器镜像搭配对应的配置,启动一个新的运行时环境后,在云上的运行时环境中执行(自动的或手工的)验证即可。


持续集成

尽管《持续交付》说“选择并安装好持续集成工具之后,只要再花几分钟的时间配置一下就可以工作了”,但实际上很少有哪个项目的持续集成实施会如此顺利。例如当“发现在运行持续集成工具的机器上缺少一些必需的软件和设置”时,《持续交付》提出的建议是“将接下来你所做的工作全部记录下来,并放在自己项目的知识共享库中……并将重建全新环境的整个活动变成一个自动化的过程”。实际上,这是一件需要高度技能水平和纪律性的事,拥有这两者的技术领导者(Tech Lead)很罕见,希望每个开发团队都有这样一名技术领导者坐镇是个奢侈的梦想。

而且,持续集成环境与开发环境仍然是有区别的,这个区别很可能是由于计算资源的限制。《持续交付》中说,“你可以很有把握地说:‘只要是在与持续集成一模一样的环境上,我的软件就可以工作。’”。然而问题就在于大多数情况下,开发环境与持续集成环境不是一模一样。这也是为什么持续集成必须集中式地进行,需要有“铃声和口哨”来及时发现构建失败,并且“要让持续集成能够发挥作用……整个开发团队就必须有高度的纪律性”。

在充分利用云计算的情况下,开发一类软件(例如“Java微服务”或“ReactNative移动应用”)所需的环境和部署流水线可以由少数几名优秀的技术领导者来标准化,开发团队不需要再操心如何配置一个持续集成环境的问题。

并且正如《持续集成将死》一文中所说,云的弹性能够使每个人、每次构建都使用标准的类生产环境,因此持续集成没有必要发生在一个中心化的“持续集成工具”上。由于持续集成的“集成”这个动作在代码进入团队代码库之前发生,很多的提醒和纪律变得不必要了:构建失败就不能提交代码,于是确保构建成功成了每个开发人员自己的事,不能把不成功的构建扔给团队去处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 思特沃克 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3.2.2 持续交付
春节前与同事讨论CD(持续交付)的技术方案,发现主流的技术方案是软件交付最后一公里的“AD”(自动化部署)。站在本系列文章提到四个关键价值的“提升交付速度”这个运维价值看,单纯的自动化部署主要将部署/回切工作从1小时提升到5分钟的效率能力上。而在端到端的IT交付价值链中,部署是其中一个节点,所提升的55分钟只占整个IT交付链路中的一部分,更大的消耗是在节点与节点之间的协同。所以,“持续交付”应该跳出“部署”,站在整个IT交付链路,关注节点的自动化、节点与节点之间的连接线,通过标准化、流水线、自动化、相关工具链打通等工程性工作的落地,提升整个IT效能。
彭华盛
2021/03/19
1K0
3.2.2 持续交付
《持续交付:发布可靠软件的系统方法》第1章 软件交付的问题
第1章 软件交付的问题 介绍 从“决定做某种修改”到“该修改结果正式上线”的这段时间称为周期时间(cycle time)。对任何项目而言,它都是一个极为重要的度量标准。1Implementing Lean Software Development 第59页 真正缺少的是一本讨论如何把各方面(包括配置管理、自动化测试、持续集成和部署、数据管理、环境管理以及发布管理)融合在一起的书 我们的目标是提供一个整体方案,并给出这个方案涉及的各种原则。我们会告诉你如何在自己的项目中使用这些实践 支持部署流水线的生态系统,
yeedomliu
2019/09/28
6790
聊聊持续交付这点事儿
持续交付指的是在短周期内完成软件产品,以保证软件保持在随时可以发布的状态。让每一个变更都经过一条自动化的检验流水线,来检查每一个变更的质量,通过就进入下一个阶段。其不是一种工具,而是一种实践!
公众号: 云原生生态圈
2022/04/08
5630
聊聊持续交付这点事儿
《持续交付:发布可靠软件的系统方法》第5章 部署流水线
第5章 部署流水线 5.1 引言 持续集成的主要关注对象是开发团队。持续集成系统的输出通常作为手工测试流程和后续发布流程的输入。在软件的发布过程中,很多浪费来自于测试和运维环节。我们常常看到: 构建和运维团队的人员一直在等待说明文档或缺陷修 测试人员等待“好的”版本构建出来 在新功能开发完成几周之后,开发团队才能收到缺陷报告 开发快完成时,才发现当前的软件架构无法满足该系统的一些非功能需求。 解决方案就是采取一种更完整的端到端的方法来交付软件。我们已经解决了配置管理以及自动化大量构建、部署、测试和发布流程的
yeedomliu
2019/09/28
1.2K0
持续交付:发布可靠软件的系统方法
由于部署工作中的很多步骤根本没有在试运行环境上测试过,所以常常遇到问题。比如,文档中漏掉了一些重要的步骤,文档和脚本对目标环境的版本或配置作出错误的假设,从而使部署失败。部署团队必须猜测开发团队的意图。
用户3148308
2021/11/24
7810
谈谈企业的持续交付流水线设计
有一天,业务人员急冲冲的跑过来,对你说生产上出现了一个严重BUG,必须要尽快修复。你听完问题描述后,胸有成竹坐定并迅速定位问题,随后改动了一行代码并提交,系统开始自动编译、各个环境自动化测试、发布上线。几分钟后,生产环境上该BUG已经被修复掉。 上面所提到的场景,这是不是很美妙?但是想必不少读者要忍不住要吐槽了,这太不实际了:新功能上线测试不要时间么?新增了功能肯定要做回归测试,这都需要一定的时间。况且怎么可以随便部署上线?还得通过预发演练、走发布审批流程。其实这些过程大家也都清楚,那么不妨从另一个角度思考
yuanyi928
2018/03/30
1.6K0
谈谈企业的持续交付流水线设计
从技术雷达看DevOps十年-DevOps和持续交付
2009年底,比利时根特举办了第一届DevOpsDays。Chris-Read作为嘉宾之一,代表ThoughtWorks出席了这次活动并带来名为“持续集成,流水线和部署”的演讲。ThoughtWorks作为DevOps运动最早的见证者和奠基人,并没有意识到这个周末聚会将在接下来10年给全球IT行业带来深远影响。
ThoughtWorks
2019/05/05
6810
从技术雷达看DevOps十年-DevOps和持续交付
持续交付流水线为何对软件开发如此重要?
作者 Andrew Phillips 译者 张斌 持续交付(CD)是一种软件策略,它使企业尽可能快速有效地向用户提供新特性。持续交付的核心思想是创建可重复、可靠和逐步改进的过程,从而将软件从概念变为现实带给客户。持续交付的目标是通过自动化软件生产线使变更不断流入生产。持续交付流水线使持续交付成为可能。 流水线将软件交付过程分成阶段。每个阶段旨在从不同角度验证新特性的质量,以确认新功能,并防止失误给用户造成影响。流水线应向团队提供反馈,并让所有交付新特性的人员了解变更流。 虽然没有标准流水线这样的东西,但典
yuanyi928
2018/03/30
1.2K0
四要素落地持续交付
持续交付(Continuous delivery,缩写为 CD),是一种软件工程方法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的编译、测试与发布变得更快更频繁。这种方式可以减少软件开发的成本与时间,减少风险。 而我对持续交付的一个较为抽象的理解是“一套软件工程方法论和许多最佳实践的集合”。方法论和实践都需要人去总结落地,所以,要想体会到持续交付的真正含义,就要在实际工作中贯彻和使用实践工具。
宜信技术学院
2019/06/28
1.1K0
【云原生】持续集成和部署(Jenkins)
CI的英文名称是Continuous Integration,中文翻译为:持续集成。
共饮一杯无
2022/11/28
1.1K1
【云原生】持续集成和部署(Jenkins)
微服务的部署与发布:持续交付与持续部署微服务
持续集成(Continuous Integration)与持续交付(Continuous Delivery )、持续部署(ContinuousDeployment)作为敏捷开发实践,可以及早发现、解决问题,从而更早地将产品交付给客户。及早地从客户那里得到反馈,就可以及早地对产品进行修复和完善,交付更加完美的产品给客户,最终形成了良好的可以持续的闭环。
愿天堂没有BUG
2022/10/28
1.2K0
微服务的部署与发布:持续交付与持续部署微服务
手把手教您构建自己的 DevOps 流水线
持续交付是一组能够帮助软件开发团队极大的提高其软件交付的速度和质量的模式和最佳实践组成。
DevOps时代
2018/08/01
2.6K1
手把手教您构建自己的 DevOps 流水线
深度解析:持续交付将如何拯救IT运维?
A 公司最近很苦恼。 A 是一个传统行业的公司,物流运输为主营业务,IT部门作为支撑部门辅助业务发展。但是随着业务的快速发展,IT 部门开始感觉到有点力不从心了:
用户1593318
2019/11/19
6090
给产品经理讲讲,什么是持续交付和 DevOps
本指南适用于: 你在科技领域就职,是产品经理或者MBA。你的团队玩 A/B 测试,特性切换,你办公室里还有一条狗。 当然,你已经理解啥是功能分支,什么是 CD 以及 DevOps 文化是什么样子。对不?嗯,当然。 你已经走在敏捷的路上,工程团队现在每周都跟你的产品人员会面,讨论故事和迭代。他们协作良好,对构建的东西感觉也越来越好。 可你的客户仍然不能更快的获得这些功能。 你仍然得等着发行列车离开车站。你已经听到过像Esty, Flickr, Google 等这些公司每天能交付100次,他们咋做到的呢? 你
DevOps时代
2018/06/22
1.3K0
深度解析:持续交付将如何拯救IT运维?
作者简介 刘劲辉(微信号:akito_hui),前阿里移动事业群高级运维工程师,现优维科技运维与平台研发专家,专注于DevOps、应用运维和平台架构设计,参与实施监控平台设计、运维规范设计、虚拟化应用、效率提升等相关工作,在若干大中型项目的建设和运维中,积累了丰富的系统运维、架构设计、项目实施经验。 前言 在深入探讨持续交付之前,我们先来看一个典型的场景: A 公司最近很苦恼。 A 是一个传统行业的公司,物流运输为主营业务,IT部门作为支撑部门辅助业务发展。但是随着业务的快速发展,IT 部门开始感觉到有点力
数据和云
2018/03/06
2.1K0
深度解析:持续交付将如何拯救IT运维?
DevOps -测试内持续集成与持续交付
「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境,持续集成(Continuous Integration)是Devops理念的一种实践过程,同时也是敏捷开发的具体表现形式。对于整个团队来说,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。这里我们着重介绍持续集成过程中的测试自动化(Test Automation),如果测试没有实现自动化的话,那么整个持续集成是不完善的,同时也不是高效的。因此自动化测试是持续集成过程中的重要一环。
用户6367961
2019/09/30
1.8K0
DevOps -测试内持续集成与持续交付
持续集成交付思想
在思考“云时代的研发环境长什么样”这个问题的时候,我逐渐意识到一件很重要的事。2000年首次被提出、在过去十几年中我们习以为常的敏捷核心实践持续集成,很可能正在走到它生命周期的尾声。
用户1348170
2021/07/09
3690
构建高质量的持续交付体系
前面的文章,聊了软件工程的基础理论、项目管理、需求分析、架构设计、软件测试以及线上服务的质量保障。其中在架构设计和线上服务的质量保障中,我也提到了关于持续集成持续交付相关的内容。软件工程的本质是用工程化的方法去规范软件开发,让软件开发项目可以按时保质完成的同时且成本可控。
老_张
2023/03/01
5080
构建高质量的持续交付体系
持续性能测试与持续集成持续发布之间的关系
在维基百科中的定义为:一种软件工程流程,是将所有软件工程师对于软件的工作副本持续集成到共享主线的一种举措。它一般是指开发工程师在对代码进行修改并提交后,通过标准化的构建操作及单元测试,在没有异常的情况下,变更代码就会合并到主干流程。
漫谈测试
2024/12/05
1240
Jenkins 创始人:持续交付的 What、Why 及 How
本文主要介绍了持续交付和DevOps的概念、现状、挑战和实践,强调了持续交付和DevOps对于软件开发和运维的重要性,并通过一些实践案例和思考来加强理解。
DevOps时代
2017/07/25
5.3K0
Jenkins 创始人:持续交付的 What、Why 及 How
相关推荐
3.2.2 持续交付
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文