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

【烧脑式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的调度。

快速指南:在DevOps中实现持续交付相关推荐

  1. DevOps核心实践--持续交付

    DevOps的核心是软件开发和交付理念,强调产品管理,软件开发和运营/系统管理员团队之间的沟通和协作,并与业务目标紧密结合.它通过建立一种文化(与相关实践)来自动化和监控软件集成,测试,部署和基础架构 ...

  2. 参考了下中国信息通信研究院发布(已在中国通信标准化协会立项)的行标“研发运营一体化(DevOps)能力成熟度模型”中对于“持续交付”核心流程中的三级指标,做了下对比,欢迎拍砖

  3. 持续交付中有哪些宝贵数据?

    通过我前面和你分享的内容,相信你已经掌握了持续交付流水线所包含的五个主要动作:代码管理.环境管理.集成和编译管理.发布管理,以及测试管理.而且,你也应该已经初步掌握了建设持续交付体系的基本方法. 那么 ...

  4. DevOps与持续交付实践

    Danilo Sato表示:DevOps是旨在打破开发团队与运维团队之间的壁垒的一次尝试,这两者对于成功的软件交付来说都是必不可少的.他的新作<实战DevOps:可靠的自动化软件交付>(D ...

  5. 【华为敏捷/DevOps实践】8. 持续交付,持续部署,傻傻分不清楚

    文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者) 前言 "持续交付与持续部署,到底谁应 ...

  6. 任发科:DevOps的前世来生,从《目标》、《凤凰项目》到《持续交付》

    本文来自作者 常新居士(任发科) 在 GitChat 上分享「从<目标>.<凤凰项目>到<持续交付>:DevOps 的过去.现在及未来」. 计算机科学中的任何问题都 ...

  7. DevOps —— 持续交付

    DevOps – 持续交付 如果把DevOps的能力提升比作是登山的话,持续交付必然是为登山准备的最重要的工具包.虽然敏捷开发已经被大多数的软件企业所接受,但敏捷的实践必须能够和持续交付的能力结合起来 ...

  8. java 当一个文本框有值时另一个文本框置灰_【农行DevOps进行时】基于PaaS的持续集成/持续交付实践 | IDCF...

    作者:曹睿 一.概述 在互联网高速发展的背景下,产品的先发优势被互联网加倍放大,业务需求变化频繁,创新步伐越来越快,导致研发效能被越来越多企业放到极其重要的位置,为了适应日益激烈的业务竞争,必须快速响 ...

  9. DevOps笔记-07:持续集成,持续交付,持续部署之间的区别

    假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付(deliver) -> 部署(deploy) 1.持续集成 持续集成:Cont ...

最新文章

  1. 数据库低端sql查询语句片段
  2. 以太坊RLP编码规则
  3. 下列属于PHP的数据类型的是,中国大学MOOC: 下列不属于PHP数据类型的是( )。...
  4. 设计模式——3单例模式(Singleton)
  5. Java的赋值与初始化
  6. iOS 进阶之底层原理一OC对象原理alloc做了什么
  7. mfc指示灯报警显示_消防百科 | 火灾显示盘的基本功能有哪些?
  8. 性能测试TPS与用户之间转换
  9. 18c分布式事务 oracle_分布式事务的现象及理解
  10. 如何成为一名数据科学家?(二)
  11. RHEL7.2系统下的软件管理(yum)、本地yum源和网络yum源的搭建
  12. c语言 不显示dos窗口,运行DOS批处理不显示DOS窗口的方法
  13. 21世纪高等专业教材21 CENTURY HIGHER PROFESSIONAL TEXTBOOKS RESUME WRITING METHOD PRINCIPLES AND RULES
  14. ESP8266-Arduino编程实例-BME280环境传感器驱动
  15. overleaf表格_latex插入表格心得
  16. socket学习之电脑手机通信
  17. CNTV的点播调度方式
  18. 【html5期末大作业】基于HTML仿QQ音乐官网网站
  19. 中国超级计算机之最,中国超级计算机神威太湖之光世界最快,且总量排名榜单第一...
  20. java中封装类Feild和使用setter和getter方法访问封装的类Feild

热门文章

  1. 5G最完整的PPT教材
  2. 算力不是王道,强化学习之父Rich Sutton的六点错误
  3. “新一代人工智能”研究的三大重点方向
  4. 人工智能思维导图一张,收藏!
  5. 干货丨机器学习研究者必知的八个神经网络架构(经典文章,值得收藏)
  6. 干货丨最全技术图谱:一文掌握人工智能各大分支技术(经典好文,值得收藏)
  7. 孙正义:互联网流量将转化为智能AI流量,我的时代终于来了
  8. 数据洪流时代的芯片之变
  9. 同为 Java 开发:有了这些 Java 项目经历,面大厂稳了!
  10. 97.16% 的加班率,给你 3 倍工资:你愿意去大厂吗?