技术开发 频道

以持续交付为核心的DevOps实践

  【IT168 技术】本文主要讨论以持续交付(Continuous Delivery)为核心的Devops使用场景及工具集实践。DevOps是提倡将开发机构的文化、流程和工具整合到一起的集成软件交付的方式。跨越从业务规划、创建、交付到反馈的整个软件开发生命周期。当前,缩短进入市场的时间是软件交付越来越关键因素,花费数月出一个版本交付已经远远不能满足当前市场环境的需要。如何能快速实现一行代码的变更,到软件交付到用户手中是DevOps实践目标之一。那么如果能把以前只能几个月的交付用几周或者几天的时间,并且从代码提交到最终交付用户只需要按下按钮,自动化每一个工作环节,及时的收到用户反馈,并将其迅速实现在下一个交付中将是软件开发过程的面临的巨大挑战。

  本文将从以下几个部分针对云环境(IaaS)应用DevOps模式以讨论:

  •   DevOps简介

  •   DevOps 相关工具集

  •   DevOps使用场景示例

  •   总结

  一. DevOps简介

  1.1 DevOps的目标和特点

  DevOps的目标是加速软件交付能力,平衡速度、花费、质量等方面,并有效控制风险,持续得到客户反馈,缩短交付变更给用户的时间,提升客户体验。实践DevOps的方法涉及两个方面,一是如何持续管理需求、变更和及时处理用户反馈,通过工具固化一定的流程,有效的管理需求和变更。另一方面就是如何持续交付。

  DevOps建立持续交付流水线(Continuous Delivery Pipeline)是持续交付的前提。在云环境中,为了节约资源以及成本,使用一系列工具实现持续交付的过程中会涉及云资源创建及回收。比如,在定制交付流水线时,有可能需要从零开始创建构建或测试的环境,这就需要适时的调用云环境提供的开放接口来创建虚拟机,并部署中间件,配置环境,然后在该环境使用完释放该资源。

  1.2 DevOps和持续交付的关系

  提到DevOps不得不提持续交付。从概念上来说,DevOps更关注Ops(Operations), 持续交付更关注Dev (Development) 。他们的目标都是解决相同的问题,即加速软件开发,减少软件开发到交付或上线的时间,并使开发和运维协作的更紧密。从更广的意义上来说, DevOps的范畴更大。它需要建立一套完善的流程,不断得到反馈,不断改进,不断的交付的过程。

  当我们把开发交付划分为,计划、编码、构建、测试、部署、运维几部分,我们可以从图1-1看出DevOps和持续交付,持续集成,持续测试,持续部署以及敏捷开发的关系。能具备持续集成,持续测试,持续部署的能力,并逐步完善从而实现具备持续交付的能力。


以持续交付为核心的DevOps实践

  图1-1 DevOps与持续交付的关系

  DevOps的目标是通过建立并不断完善持续交付的流水线。图1-2 展示了无需人工干预的持续交付过程。从代码开发到持续集成,创建测试环境,运行测试并报告结果,完成各种测试计划中任务,最后是业务决策交付或部署上线。

以持续交付为核心的DevOps实践

  图1-2 持续交付流水线

  Devops转型是一个长期过程,可以从评估成熟度中了解当前的状态,从而找到起始点。使用工具驱动,逐渐渗透整个过程的转换,确保其持久性。另外还需要通过流程的规范化,执行周期性的流程审查,逐渐建立持续改进的文化。

  二. DevOps相关的工具集

  上一章讨论了DevOps的目标和特点,以及DevOps与持续交付的关系。在本章对以持续交付为核心的DevOps可能使用到的工具做一些简要的介绍。实现DevOps持续交付流水线会可能用到开源的,来自各大厂商的各种持续集成、测试、部署的工具。本文仅提到了一部分的工具,给读者一些参考,见表1-1。

以持续交付为核心的DevOps实践

表1-1 DevOps工具说明及用途

  表1-1中提到的工具中Jenkins和Urben Code Deploy作为持续交付流水线的核心工具,他们将原本可独立持续集成,持续测试等模块,串联在一起,形成了整个交付流水线。他们有些相似的特点,比如都拥有多种插件,可通过简单配置与其他工具集成。可以单独作为交付流水线中任务调度工具。Jenkins 配置简单,容易上手;Urben Code Deploy则拥有强大的自动部署功能,通过定制部署流程可完成各种复杂的环境配置及部署。另外,表1-1未提到的比较流行工具例如:Git , GitLab等可替代RTC作为团队协作、代码管理工具。

  三.DevOps使用场景示例

  前一章讨论了持续交付用到的一些工具。接下来以一个DevOps的使用场景为例,讨论持续交付流水线的建立,以及在该场景下开发团队和运维团队的扮演的角色及承担的职责。

  3.1持续交付流水线示例

  Devops的目标,持续交付流水线示例见图2-1.

  开发团队可以使用RTC ( Rational Team Concert ) 进行协同开发,项目管理,以及管理代码。通过提交代码自动触发持续集成任务,Jenkins首先作为持续集成工具不仅可以解决各种模块之间的依赖,还可以触发接下来的构建过程,在成功完成的构建之后,可触发预置的简单的脚本调用测试环境的准备。

  这里需要云平台(本文指IaaS云平台)提供可用的Rest API 接口为创建测试所用的虚拟机。Jenkins可通过设置任务的完成来触发下一个任务,即调用已有的Chef server/agent执行脚本安装相关测试环境的中间件。另外,通过Urben code Deploy将已经定制好的部署流程及构建好的部署包部署到测试环境,执行测试脚本完成测试步骤。该过程可根据测试计划循环完成多种测试要求。

  整个开发环境可分为本地开发环境,测试环境,准生产环境,生产环境。当产品通过了各种测试,例如: 功能测试,性能测试,系统测试等等,需要部署到准生产环境,其特点是与生产环境参数基本一致,在用户接受测试通过之后,可根据业务需求或决策部署在生产环境了。

  敏捷的项目开发方式是通过多次小型迭代的开发过程,试图做到及时的发布,迅速得到用户的反馈,不断改进,从而实现逐步还原用户的真实需求。

  另外图2-1只是为读者提供了一个流水线示例,在实际操作中可以根据团队规模,项目流程做相应的简化或添加。

以持续交付为核心的DevOps实践

  图2-1.持续交付流水线示例

  3.2示例中的开发团队和IT运维的角色及职责

  根据开发、测试、部署的环境,开发团队的大小,所需要IT基础架构的复杂程度也有所不同。

  图2-2示意了在DevOps示例中开发团队和IT运维的角色和职责。IT运维团队提供持续计划服务,基础架构服务,和持续集成服务在基于IaaS的云。从而使开发测试团队可以集中精力在各种迭代开发项目中。开发团队在此架构上,开发过程的特点,以及交付流程的需求,自由定制交付流水线,并在此之上进行不断的开发测试迭代。

以持续交付为核心的DevOps实践

  图2-2. Devops示例中的角色及职责

  四. DevOps实践相关总结

  本文通过前面三个章节的内容,介绍了DevOps的目标和特点以及DevOps与持续交付的关系,另外通过一个示例场景介绍了如何建立持续交付流水线以及其相关的工具的用途。

  希望能给即将从传统开发交付模式准备转型为DevOps的读者提供一些的参考。

  DevOps转型需要一个过程,工具虽然能帮助我们有效的运用DevOps持续交付。但是它并不是DevOps的全部。它需要建立一种文化,通过人、过程和工具的紧密结合,共同协作并且逐渐形成。不能把持续交付理理解成团队里的某个人的工作,而是需要从各个方面收集反馈信息,持续的监控并优化过程,按照不断改进的过程来实现理想的交付状态。

  参考资料

  http://www.ibm.com/developerworks/cn/rational/d-implement-itil-devops/

  http://www.ibm.com/developerworks/cn/rational/d-cloud-devops/

  http://www.ibm.com/developerworks/cn/rational/d-drive-agile-lifecycle-management-devops/

  作者简介

  陈晓玲

  任职于某大型IT外资企业,从事过项目管理,IT运维管理,系统优化管理,软件配置管理等工作,具有丰富的IT运维管理经验。

0
相关文章