快速指南:在DevOps中实现持续交付

本文讲的是快速指南:在DevOps中实现持续交付【编者的话】时至今日,以几乎相同的步调实现开发与交付已经成为一种必需。本份快速指南将帮助大家弄了解持续交付概念中的那些“良方”与“毒药”。

【烧脑式Kubernetes实战训练营】本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理、Kubernetes DNS与服务发现、基于Kubernetes和Jenkins的持续部署方案 、Kubernetes网络部署实践、监控、日志、Kubernetes与云原生应用、在CentOS中部署Kubernetes集群、Kubernetes中的容器设计模式、开发Kubernetes原生应用步骤介绍等。

开发人员总是面临着软件发布规模与速度层面的种种压力,而这亦促使其采用各类新型概念和工具。但是,令人困惑的术语混淆了真正的技术和商业利益,特别是考虑到供应商也拥有自己的倾向与诉求。如果您需要的是真正的技术手段而非营销口号,大家往往会发现自己很难为持续构建与交付的实现找到最佳方法。本文将为大家带来与持续交付相关的基础知识,希望能够为各位带来一点启示。

首先,以下术语适用于同一生产流程的不同部分,而各个部分的自动化程度皆不尽相同。

  • 持续集成(Continuous integration)是指频繁将代码合并至中央储存库中。“频繁”通常具体指一天多次。每次合并操作都会触发一个自动化的“构建与测试”实例,这一过程也会被称为持续构建。但是无论具体表达如何,持续集成和持续构建都无法直接实现交付和部署方面的工作——其只负责代码层面的管理,而不涉及其它具体事务。
  • 持续交付(Continuous delivery)是指软件交付过程中的自动化机制,其中包括一部分需要开发人员亲自动手的操作。通常来讲,开发人员都会允许和启用自动部署,不过同时也会配合其他一些手动的步骤。
  • 持续部署(Continuous deployment)是指不需要开发人员以手动方式操作的持续交付机制。整个流程皆自动实现,而不需要人为参与。

Marko Anastasov在一篇博文中解释称,利用持续部署,“开发人员的工作通常集中在检查同事们提交的合并请求,并在将其合并到主分支上后即宣告完成。”持续集成/持续部署服务在这里接管后续工作,包括运行一切测试案例并将代码部署到生产环境中,而后通知相关团队每一个重要事件的对应结果。

然而,仅仅了解术语和它们的定义并不能帮助大家确定应在何时、何地对其加以运用——毕竟每种技术都拥有着自己的优势与劣势。

当然,如果市场能像对待DevOps一样清楚地区分这些概念、工具及其对应受众,自然可以带来完美的成效。然而……

“DevOps是一种概念,一个想法,一类生活哲学。”软件交付自动化厂商XebiaLabs公司首席营销官Gottfried Sehringer指出。“这并非一种特定工序或者工具集,也不是一种技术。”

遗憾的是,行业里的术语很少配有简单明了的表述,也没有提示能够告诉人们如何以及何时使用这些技术。因此,这份指南旨在帮助大家了解何时适合使用哪种技术。

根据你对速度的需求来选择加速方案

等等,速度难道不是所有软件开发的关键吗?现如今,公司通常都会要求开发人员每天,每周或是每月进行软件更新或者添加新的功能。这在过去,甚至在敏捷开发时代下都是闻所未闻的严苛要求。

不止于此,一些公司还会追求更快的软件更新速度。Sehringer说:“如果你在亚马逊工作,那很可能每几秒钟就需要进行一次更新。”

不论你是软件漏洞的行家,或是开发人员又或是运维专家,当必须快速完成构建与发布任务时,大家该如何提供高质量且“不破坏任何既有成果”的代码呢?面对这样的问题,每个人都有自己的妙招。“敏捷开发”,“持续构建”和“持续集成”则是其中呼声最高的三种方案。

下面让我们对其进行概括说明。

软件服务供应商Nexient公司资深交付主管Nate Berent-Spillson指出,“你可以把持续性看成是‘自动化’。它降低了开发和部署的成本与时间。”

那为什么不直接使用自动化作为专业表达?

自动化概念的加入、持续构建、持续交付以及任何与持续性相关的因素,都属于DevOps的核心范畴,而我们其实陷入了文字表述的误区。下面,我们将带大家共同理清思路。

自动化DevOps的三要素

持续构建的本质在于“通过小步骤进行构建。”每个小的步骤都是为了把软件以持续性方式集成到生产环境中这一目标而服务。

尽管部分实践者会对“持续集成”概念作出进一步细分,但“持续集成”这一标签仍常常被指向同一类事物。持续构建属于持续集成的组成部分:在持续构建的过程中,开发者只需编写代码,并将其与仓库中现有的代码合并,之后就可以让自动化来接管构建和测试合并后的代码。这样开发者将不必浪费时间在手动编译和测试上,而是把更多时间投入到代码编写与创新实现身上。

但是,仅仅利用部分自动化工具并不意味着能够提升整个发布流程的速度表现。毕竟代码本身还没有部署完成——而部署工作可能需要手动操作,也可能因为开发人员忙不过来而被推迟。

作为OutSystems(面向企业的移动和网页应用的快速交付平台)公司的首席技术布道者,Dan Juengst解释说:“随着持续集成的运用,组织能够从以笨重的整体式应用(monolithic application)为核心的思维模式升级到一种能够支持并鼓励轻量化且高频度软件更新的方案。” 

然而,在更大规模的持续集成过程中,与其说持续集成是一个独立的步骤,不如将它看成是一种并行的步骤。InfoZen公司首席转型官Susan W.Sparks说:“不同于仅仅提供了一种可持续且低风险代码部署方案的持续交付机制,持续构建在持续集成当中负责定期合并新代码并实施构建。”

正如Sparks所言:“通过持续集成,你也可以实现持续交付。”当然,前提条件是大家的代码具备可部署性。

另外,大家还需要把创新团队放在首位。前雅虎首席技术官,现任Cybic首席技术官的Mike Kail说:“将DevOps落地的第一步通常就是采用持续集成。这为开发人员提供了更加协调的环境,有利于提高代码质量。”

何时使用持续集成vs.应用程序的自动化发布

那么持续集成是否就是应用的自动化发布(ARA)——这两种称为是否代表着同一事物?答案是否定的,正如Sparks所言:“它们是同一框架下的两种不同组件。”

持续集成的运用集中体现在使用公共源代码库(如GitHub)的应用开发人员上。Sparks说,每当开发人员更新软件时,他们的代码都将被重新整合到整个应用中。换句话说,持续集成工具检查所有的源代码,构建所有成果(例如编译软件),运行所有的单元测试,同时立即作出结果反馈。

另一方面,应用的自动化发布是指对集成后的代码进行打包,并在开发结束后将代码自动转移。

Sparks说:“举个例子,开发始于代码。当实现了所有功能并通过了所有测试之后,你就可以利用应用程序自动化发布来将代码包移动到下一个环境,例如测试环境。”

从另一个角度来看,就像Sehringer说的:“持续集成是内容,而应用的自动化发布则是运用工具的过程,二者属于同一事物的不同侧面。”

冲洗。重复、重复、重复、重复(DevOps中的自动化)

自动化机制拥有理想的投资回报。Sehringer指出:“如果在前期制作阶段能够确保产品的万无一失,那你就能立即把它推向生产而不破坏任何原有成果,之后只要重复这一过程就可以了。”

换句话说,您可以通过结构化、可重复的自动化方式来实现所有的交付步骤,从而降低风险并提高发布和更新的速度。

“在最理想的情况下,你只需按下一个按钮,就可以做到每几秒钟就进行一次发布。”Sehringer说。“但现实世界没那么理想化,还是需要人工插手来把整个流程对接起来。”

公司可能需要法务部门的批准才能对应用做修改。Sehringer指出:“一些受到严格监管的公司甚至需要额外的手段来确保合规性。因此,了解瓶颈的具体所在是很重要的。”ARA软件应该提高效率,并确保应用能够按时发布或更新。

Sehringer 还说:“开发人员对持续集成更为熟悉,而应用的自动化发布则属于较新的概念,也因此导致理解程度普遍不高。”

整合,而后加以尝试

首先,要了解你的承诺、风险在哪里以及目标是什么。

Berent-Spillson表示:“持续构建、持续集成和持续交付只能算是基本底限,持续部署才是更为深入的步骤。”

他补充称:“利用持续部署,您可以承诺在不需要人工参与的情况下来部署每一行新代码,而不再以人为方式一次性将代码发布出去。当新代码提交到存储库时,其将自动接受构建、集成、测试和暂存(stage)。其中的核心变在于对主线开发作出的承诺。”

这些概念的差异之处表现为自动化程度的区别,但它们都适用于一套更为宏观的开发框架。整个流程可以总结为:首先进行持续集成,而后是持续交付或持续部署。我们可以把持续部署看作是持续交付的升级版。但是在集成、构建和测试完成之前,不会有任何代码被实际部署——这就是为什么我们要将持续集成放在首位。

专家们对于把这些概念付诸实践的最佳建议是从小处着手,然后在每一次迭代中作出小范围改进。最终,大家将不再专注于单个问题,而是构建起一套能够通过自动化机制实现速度与安全性保障的架构。

Berent-Spillson的建议是,“从持续构建开始,然后提交给自动化测试(测试金字塔),并开始进行持续集成。随着你对持续集成的效果愈发满意,同时不断改进你的自动化部署方案,最终需要确保回滚的无缝化实现能力。”

他解释称,因为回滚难度有所下降,这种方法将使得持续部署变得更容易。“在遇到错误的时候,大家可以进行回滚,然后问自己,‘我们能够如何利用自动化、感知化或测试手段来防止这一问题的发生?’”

给领导者们的经验教训

  • 如果您所做的只是持续构建和持续集成,那么您很有可能会造成瓶颈并减缓整个部署过程。我们的目标是实现频繁发布,这意味着您需要更高水平的自动化机制以更快地进行版本发布。
  • 在每次迭代中进行部分自动化或改进,直到您最终达到全面自动化。大家可以列出一张清单或一张图表,从而确保相当努力能帮助自身朝着目标稳步前进。
  • 在持续集成之后,使用持续交付。只有在解决了持续交付中的合规性与管理问题、并且能够实现无缝回滚之后,您才可以进一步尝试持续部署。持续部署应是软件发布当中人为介入程度最低的自动化阶段。

原文链接:The quickie guide to continuous delivery in DevOps (翻译:马申君)

===========================================
译者介绍

马申君,代尔夫特理工大学计算机专业的研究生,研究方向是云资源的弹性伸缩和workflow的调度。

原文发布时间为:2017-09-05

本文作者:马申君

原文标题:快速指南:在DevOps中实现持续交付

时间: 2025-01-25 04:31:46

快速指南:在DevOps中实现持续交付的相关文章

OpenShift中的持续交付

上一文中讲述了如何在AWS下搭建OpenShift集群.这篇文章将目光转向如何在OpenShift中实现CI/CD以及产品环境的部署. 持续交付 如果要打造一个持续交付的流水线,首先要考虑多环境的问题.一般一个应用程序会有多个环境,比如开发环境.集成测试环境.系统测试环境.用户验收测试环境.类生产环境.生产环境.如何在OpenShift中隔离并建立对这些环境的部署流程有多种方案可以选择. 同一个project中使用label和唯一名称来区分不同的环境: 集群中的不同project来隔离环境: 跨

从代码到上线, 云端Docker化持续交付实践

关于分享者: 罗晶,花名瑶靖.在加入阿里云之前,先后在支付宝平台数据技术事业群.百度基础架构部任职.现主要负责阿里云容器服务产品的集群管理系统的研发,从事容器的持续交付.持续集成的方案设计与实现. 演讲内容架构 大话持续交付 持续交付的前世 容器化DevOps 持续交付的今生 演讲主要内容 持续集成指的是,频繁地(一天多次)将代码集成到主干.持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量.它的核心措施是,代码集成到主干之前,必须通过自动化测试.只要有一个测试用例失败,就不能集成. 持

谈谈持续集成,持续交付,持续部署之间的区别

经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢? 假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 正如你在上图中看到,「持续集成(Continuous Integration)」.「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不同的软件自动化交付周期. 持续集成 持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成

初创企业如何做高效持续交付

直播视频点击回顾 随着云计算.大数据.AI智能等前沿科技的发展,传统的研发速度越来越难满足企业快速发展的需求,研发效能也成了继商业模式.技术突破之后的另一核心竞争力.如何保护企业代码资产,释放程序员"债务"压力?初创企业,如何打造7天互联网研发生命周期? 本文主要从双十一的员工消费引出研发协同,然后开始着重分析初创企业的持续交付,包括初创企业必备的种种,最后对初创企业的分享做了简要总结.一起来了解下吧:   双十一的这一天 双十一这一天,消费者忙着买买买,商家忙着卖卖卖,快递忙着送送送

基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统

前言 在上一篇文章中讨论了容器服务提供的交付能力,在本文中我们将讨论如何从零搭建一个持续交付系统. 对于大多数公司而言,选择一个合适自己的持续交付系统是尤为重要的一件事情,不同的公司.不同的业务使用的场景也各不相同,因此要根据自己的业务场景与发展方向来选择合适的方案.根据不同的业务场景与交付方式,阿里云容器服务提供了三种不同的持续交付方案. 基于Jenkins的持续交付方案 基于Jenkins的持续集成和持续交付方案是所有方案中最灵活.能力最强的方式,但也是需要客户自主运维的方案.对于现有提供持

谈谈企业的持续交付流水线设计

本文讲的是谈谈企业的持续交付流水线设计,有一天,业务人员急冲冲的跑过来,对你说生产上出现了一个严重BUG,必须要尽快修复.你听完问题描述后,胸有成竹坐定并迅速定位问题,随后改动了一行代码并提交,系统开始自动编译.各个环境自动化测试.发布上线.几分钟后,生产环境上该BUG已经被修复掉. 上面所提到的场景,这是不是很美妙?但是想必不少读者要忍不住要吐槽了,这太不实际了:新功能上线测试不要时间么?新增了功能肯定要做回归测试,这都需要一定的时间.况且怎么可以随便部署上线?还得通过预发演练.走发布审批流程

使用Azure应用服务开发持续交付的管道

一般而言,企业用户会希望加速云应用的部署,而持续交付就可以实现这一目标.本文将介绍如何使用Azure应用服务来开发一个持续交付管道. 对于那些想要通过持续交付管道在云中部署网络.移动或API应用的用户来说,微软公司的Azure应用服务是一个不错的选择. 无论是一名开发人员还是一名运营工程师,Azure应用服务都能够让他能够更为快捷地完成应用开发或部属.同时,因为它是一个完全托管的平台,所以团队成员们可以更多地关注他们的应用,而不会因为因为开发和维护可扩展性和高可用性基础设施所需的所有复杂性而陷入

如何利用容器构建持续交付/持续发布系统?

讲师介绍  ​张春源 希云技术总监    概述     提到软件发布确实是很令人头疼的一个过程,且还是高风险动作.借用一句话:"99%的故障是由于变更引起的".本次分享内容着重介绍使用容器技术实现自动化构建.部署和测试过程,并使得开发.测试.运维之间能更好的协作,最终可以在几个小时甚至几分钟的时间,实现可重复,且可靠的软件发布系统.   常见场景    在开发测试环境中测试均没有问题,但上生产环境的时候会有问题.即使我们在开发测试环境中部署上万遍没问题,但从来没有在生产环境中部署过一次

#翻译# 持续交付成熟度模型

持续交付的原则和方法,正在迅速地被越来越多的人认可为一种真正的业务敏捷的成功策略.对于许多组织结构,问题不再是"为什么要采用",而是"如何采 用":持续交付如何起步,以及组织机构应该进行哪些调整,才能保证得到可以接受的成果.本文介绍的这个成熟度模型,目的在于给出一个框架以及对几个关键方 面的理解,这些方面是你在组织中采用持续交付时需要重点考虑的.