持续交付之自动化构建

前言:

       十年前,敏捷软件开发方法在国内还少有人知,现在却成主流。持续集成作为一个敏捷开发的最佳实践,近年来也被广泛接受。然而,作为企业来讲,除了要分析业务开发模型和组织结构是否适合用敏捷和持续集成之外,还需要整体考虑研发到生产这一环节。显然,敏捷和持续集成的理念并没有很好的解决所谓的“最后一公里问题”,即如何让软件从“开发完成”迅速实现“上线发布”。

一:部署流水线

       软件发布应该是个快速且可重复的过程。在很多组织中,发布过程是不可重复或不可靠的。软件行业内有很多种软件开发方法,但它们主要关注于需求管理及其对开发工作的影响。市面上也有很多优秀的书,它们详细讨论了在软件设计、开发和测试方面各种各样的方法,但它们都仅仅讲述了将软件交付给作为客户的人或组织这一完整价值流的一部分。一旦完成了需求定义以及方案的设计、开发和测试,我们接下来做什么?我们如何协调这些活动,尽可能地使交付过程更加可靠有效呢?我们如何让开发人员、测试人员,以及构建和运维人员在一起高效地工作呢?经过长期思考和实践,我们摸索到一个答案,那就是建立部署流水线,形成自动化持续交付平台。通过将敏捷和持续集成的理念应用到整个软件生命周期中,利用各种敏捷原则和最佳实践打破用户、交付团队及运维团队之间的壁垒,让原本令人紧张、疲惫的软件发布过程变的轻松,令原本枯燥易错的部署操作已变得只需点鼠标即可完成。

       从本质上讲,部署流水线就是指一个应用程序从构建、部署、测试到发布这整个过程的自动化实现。部署流水线的实现对于每个组织都将是不同的,这取决于他们对软件发布的价值流的定义,但其背后的原则是相同的。部署流水线的示例如图1-1所示。

       部署流水线大致的工作方式如下:对于应用程序的配置、源代码、环境或数据的每个变更都会触发创建一个新流水线实例的过程。流水线的首要步骤之一就是创建二进制文件和安装包,而其余部分都是基于第一步的产物所做的一系列测试,用于证明其达到了发布质量。每通过一步测试,我们都会更加相信这些二进制文件、配置信息、环境和数据所构成的特殊组合可以正常工作。如果这个产品通过了所有的测试环节,那么它就可以发布了。

        建立部署流水线的目标有三个。首先,它让软件构建、部署、测试和发布过程对所有人可见,促进合作。其次,它改善了反馈,以便在整个过程中,我们能够更早的发现并解决问题。最后,它使团队能够通过一个完全自动化的过程在任意环境上部署和发布软件的任意版本。

       那么,如何建设部署流水线呢?精益软件开发运动告诉我们“整体优化是非常重要的”。所以,在持续交付过程中,用一种整体方法将交付过程中各个方面以及参与该过程的所有人联系在一起是非常必要的。只有当能够控制每一次从引入变更到发布的整个过程时,你才能优化和改进软件交付的速度和质量。因此,在联动优势建立部署流水线,则需要将配置管理、自动化测试、持续集成和部署、数据管理、环境管理以及发布管理融合到一起,综合考虑,统一建设。基于精益和迭代软件开发的理论,我们的目标是向客户快速迭代的交付有价值且可工作的软件,并持续不断的从交付流程中消除浪费。为了达到这一目标,需要逐步完成以下几项工作:

1 建立增量迭代开发模型

2 配置管理

3 自动化构建

4 自动化部署

5 自动化测试

6 自动化更新基线

7 配置管理

8 数据管理

9 环境管理

10发布管理

       其中,我司的部分业务比较适合采取部署流水线的形式。因此,在2012年,技术管理中心开始逐步推动和建设部署流水线平台。2012年,是突破的一年,质量保证组首先完成了配置管理工具CVS2SVN的升级,接下来完成了自动化构建、落地以及自动化更新基线(还未落地)和部分发布管理的建设;测试组完成了自动化部署的建设与落地及部分业务线的自动化测试,这些都为日后建立部署流水线做好铺垫。下面,我们简单介绍一下自动化构建系统。

       首先,我们来看一下构建的发展史。在软件构建的初始时期,构建是构建工程师的天下,他们负责执行编译流程,执行手工构建。而后,随着构建项目的增多,单纯的手工构建无法满足项目开发进度要求,构建工程师将重复的工作写成脚本,从而形成了半自动构建时代;半自动构建虽然提高了构建的速度、缩短了构建时间,但是缺乏灵活性,并且需要维护大量构建脚本;因此出现了自动化构建工具—hudson,构建工程师可以灵活配置构建项目、专注于构建项目本身,提高构建质量从而提高了整体开发效率。具体发展过程可参考图1-2。

 

图 1-2 构建成长之路 

二:Hudson 工具简介

       上文提到了自动化构建工具Hudson,接下来简单介绍一下Hudson。 Hudson 的前身是Jenkins,它是基于Java开发的一种持续集成工具,用于监控程序重复的工作,包括持续的软件版本发布/测试项目和监控外部调用执行的工作。工具主要由6大部分组成,见图1-3。

 

图 1-3 Hudson 结构

它的主要特性有:

1、易于安装-只要把hudson.war部署到servlet容器,不需要数据库支持;

2、易于配置-所有配置都是通过其提供的web界面实现;

3、集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过e-mail实时通知;

4、生成JUnit/TestNG测试报告;

5、分布式构建支持-Hudson能够让多台计算机一起构建/测试;

6、文件识别- Hudson能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;

7、插件支持-Hudson可以通过插件扩展,你可以开发适合自己团队使用的工具。

如图1-4。

图1-4 Hudson的特性

       下面简单介绍一下Hudson的工作原理。Hudson完自动化构建主要有四步(见图1-5):

第一步: 处理upload:将upload文件中的root_path、add_file_path、modify_file_path、delete_file_path、environment内容存放到映射数据变量dic_path中;

第二步:连接MySQL数据库,查找编译项目发布版本数(ci),如果第一次发布、系统自动添加项目名、工单号,发布数值为1的信息到数据库中;否则取出项目发布版本数(ci);

第三步:分组、打包。根据dic_path映射中的数据,创建对应的environment文件夹,检索。build目录下中的add_file_path、modify_file_path、delete_file_path文件,最后,将environment文件夹打包压缩,便于网络传输;

第四步:发布结果。将三中产生的压缩结果包,通过ssh方式,远程发布到134服务器。

       实施Hudson能给我们带来哪些好处呢?我们从图1-6 我们可以清晰的看到:实施Hudson 后,整个发布流程中缩减了“提交编译申请”、“手工发布”这两个环节,机器受理将流程从原来的5步减少到现在的3步,从而大大提升了开发效率。此外,Hudson 还在其他方面有很多益处,如7x24 小时支撑,提高版本质量等,具体参考图1-7。

                                                                                                                                 

 

图1-6 Hudson 带来的流程优化

图1-7 Hudson的益处

      以上是对自动化构建的简介。自动化构建只是建立部署流水线中的一步,要想完成部署流水线平台的搭建,我们依旧“路漫漫其修远兮 “。目前,我们已经将自动化构建推广至14个开发团队(通信账户支付开发组、用户管理及客服开发组、电子商务应用开发团队、现场手机支付省平台开发组、远程手机支付省平台开发组、手机支付广东开发组、手机支付四川开发组、手机支付浙江开发组、Andriod开发软件组、营销前置接入组、应用系统组、无线终端组、账户清结算组、支付业务网关组)。接下来,我们将在持续集成方面下更多的精力,逐步走向”过程自动化“。

三:持续集成

       持续集成的基本原则是尽早集成,经常集成。它要进行四个持续,即:

一) 持续自动构建 :使用CI,您只要按一下按钮,它会依照预先制定的时间表,或者响应某一特定事件,就开始进行一次构建过程。

二) 持续自动检查 :CI系统能够设定成持续地对新增或修改后签入的源代码执行构建,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断要求确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在手动检查彼此相互依存的代码中变化情况需要花费的时间和精力。

三) 持续自动测试 :这个是构建检查的扩展部分,这个过程将确保当新增或修改代码时不会导致预先制定的一套测试方案在构建构件后失败。构建测试和构建检查一样,失败都会触发通知(Email,RSS等等)给相关的当事人,告知对方一次构建或者一些测试失败了。

四) 持续部署:一旦自动化检查和测试的构建已经完成,一个软件构件的构建周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。只有这样,构件才能更迅速地提供给用户使用。

图1-8 持续集成流程图

 

持续集成有以下四个好处:

1.减少风险。一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况。

2.减少重复过程。减少重复的过程可以节省时间、费用和工作量。

3.任何时间、任何地点生成可部署的软件。持续集成可以让您在任何时间发布可以部署的软件。

4.增强项目的可见性。其一,有效决策。持续集成系统为项目构建状态和品质指标提供了及时的信息,有些持续集成系统可以报告功能完成度和缺陷率。其二,注意到趋势。由于经常集成,我们可以看到一些趋势,如构建成功或失败、总体品质以及其它的项目信息。

       以上对建立部署流水线、持续集成以及工具Hudson做了简单介绍。也许这些东西大家都知道,而且有些人可能已经实践过,无论这些实践的结果是怎样的,一定不要忘记总结和反思。如果这些实践成功了,不要把它归功于这个工具,而是要总结一下为什么会成功,如果你愿意的话,还可以和大家分享一下; 如果这些实践失败了,也不要把它归功于这个工具,而是要反思一下,是否正确地使用了这个工具,团队成员是否都喜欢这个工具,为什么等等。

 

你可能感兴趣的:(SQA)