段琳++孙恒一
摘 要 传统的软件开发模式经常会遇到开发阶段与验收阶段隔离所带来的诸多问题,基于Bamboo的持续集成系统通过自动化手段为软件项目开发团队转变传统开发模式、实践持续集成思想提供了足够的平台支持,有利于项目快速反馈机制的建立、有利于尽早发现问题手段的完善,为软件的高质量交付创造条件。
【关键词】软件开发模式 持续集成 自动化
1 引言
传统的软件项目在开发阶段并不要求进行软件集成,这就造成了应用程序在相当长的一段时间内始终处于无法运行的状态,尤其在软件开发团队规模比较大的情况下这一现象显得尤为突出。原因很简单,项目干系人没有兴趣在开发完成之前运行整个应用。针对项目的软件测试在没有可运行应用程序的情况下,更多依赖于软件开发人员自行编写的单元测试,而这些测试用例对于运行环境来讲意义不大。这样的做法对于那些项目分支的生命周期很长或者把验收测试放到项目尾声来做的团队将是灾难性的。为了弥补这一缺失,团队负责人不得不在开发结束后预留很长的时间作为集成阶段,最糟糕的是没人知道到底要花多长时间完成项目集成。极端的情况是有些项目到了集成阶段才发现软件并不完全满足用户需求。
解决以上困难的途径之一就是采用持续集成。持续集成要求每当有开发人员提交代码,就要对整个应用实施构建、部署并执行全面的自动化测试进行验证。这一过程中最重要的原则是如果构建或者测试失败,则开发团队应立即停止研发的工作,在最短的时间内予以修复。持续集成的目标是保证正在开发的软件一直处于正常工作状态。
持续集成是一种软件工程实践,即项目研发团队对源代码进行高频度集成。每次集成都通过自动化构建(包括编译,发布,自动化测试)来验证集成效果从而尽快发现并改正软件错误,进而提高软件质量。企业可以通过建立以持续集成为核心软件开发控制体系来规范其软件版本变更行为,实现对软件版本变更的深入管控,确保软件版本发布的正确性、合规性及稳定性。
为了能够深入理解持续集成理论,在实践中积累应用经验,特选取Atlassion公司的持续集成管理系统Bamboo进行持续集成系统研究。
2 持续集成系统研究
2.1 Bamboo简介
Atlassian Bamboo是一款商业的持续集成构建服务器软件。它是一套持续集成服务系统,它会在代码库有变动后有策略的触发构建、部署及测试以确保新的变化很好地整合到已有的代码库中或者通过反馈机制快速将失败发送给开发团队;发布管理功能通过脚本执行来规范发布流程。Bamboo实现持续集成的原理图如图1所示。
2.2 准备工作
在开始搭建持续集成之前,需要做好版本控制、自动化构建及团队意识建立三件事情。
2.2.1 版本控制
与项目相关的所有内容都必须提交到一个版本控制库中,包括产品代码、测试代码、数据库脚本、构建与部署脚本,以及所有用于创建、安装、运行和测试的相关文件,本次研究采用的版本控制工具为Tortoise SVN。
2.2.2 命令行脚本
持续集成系统是通过命令行来执行自动构建、部署、测试和发布的。这么做是为了确保持续集成是以自动化方式完成整个过程的。应尽量保持脚本整洁、易于理解、易于维护,这样有利于使用持续集成系统的项目人员更好的协作。
2.2.3 团队意识建立
严格的讲,持续集成并不是一种工具,而是一种软件开发实践。它需要开发团队能够给予支持并严格遵守持续集成原则,每个人以增量的方式频繁提交代码并认同“修复破坏应用程序的任意修改是最高优先级的任务”,如果团队无法达成类似共识,那么便无法通过持续集成达到提升软件质量的目标。
2.3 流程自动化
源代码提交流程是Bamboo持续集成系统应用中最重要的组成部分。如图2所示的源代码变更流程中,交付/开发团队提交代码至版本控制库,触发构建和单元测试,构建成功则触发自动化验收测试,成功则继续用户验收测试以及发布,在每一步出现问题则及时反馈给交付/开发团队。
这一过程保证了源代码在提交、构建、单元测试、自动化验收测试、用户验收及发布的各个阶段始终处于被控状态,整个过程以流水线的形式开展并对过程结果予以记录和反馈,从而实现流程自动化。流水线的输入是版本控制中的某个具体版本,输出的是经过测试的发布版本。
有效地阻止那些没有经过充分测试或不满足功能需求的版本进入生产环境能避免回归缺陷,尤其是对那些需要紧急修复并部署到生产环境的情况来说更为重要。在构建、部署、测试以及发布被自动化实现以后,项目团队能够更加灵活的处理紧急情况,产品发布根本不会存在任何风险,因为总有一个最近的正确版本作为下一次代码提交的基础,一旦有问题则立刻回滚,然后线下修复就可以了。另外自动化还能避免手工易错步骤带来的项目风险。
2.4 多种开发语言支持
Bamboo针对不同编程语言的特点,提供多种构建、部署、自动化测试的工具,如图3所示,构建工具包括Ant、Bower、AWS CodeDeploy、Docker、Grails、Grunt、Maven、MSBuild、NAnt、Node.js、Nodeunit、Devenv、Script等;如图4所示,测试工具包括JUnit、MBUnit、Mocha Test、MSTest、NUnit、PHPUnit、TestNG等;如图5所示,部署工具包括Artifact Download、Tomcat、Docker、Heroku、SSH、SCP等。这些工具为实现持续集成自动化提供有力支持。
本次研究以目前主流的三种软件开发语言Java、MS.Net、PHP为例验证Bamboo持续集成系统对持续集成的实现。
JAVA项目采用:
Ant+Selenium+Nunit+Tomcat。
MS.Net项目采用:
MSBuild+WatiN+MSTest+Artifact Download。
PHP项目采用:
Selenium+PHPUnit+SSH。
实践证明,Bamboo提供的持续集成工具能够很好地发挥作用。
2.5 部署一体化
软件部署流程的起点是开发人员向版本控制库提交代码,持续集成管理系统对这次提交做出响应即触发部署流程。第一个阶段称为提交阶段,通过编译代码、运行单元测试、执行代码分析、创建软件二进制包,在所有单元测试验证通过后将可执行代码打包成可执行文件,并放到一个制品库(Artifacts Repository)中。Bamboo提供了保存这种过程产物的功能,并能够将其提供给流水线的后续阶段。
第二阶段进入验收阶段,主要特点为自动化验收测试、冒烟测试的执行。持续集成服务系统Bamboo支持多个代理机(agent)同时运行自动化任务。这种并行执行会明显提高执行效率,更快得到反馈,更快针对反馈做出处理。这个阶段是流水线中第一阶段成功完成后自动触发的,该阶段完成后同样会将验证后的成果放入到制品库中。
第三阶段进入部署阶段。前两个阶段的顺利完成为第三阶段创造了条件,根据不同项目特点,将产品实际部署到任意环境(测试环境、发布环境、生产环境等)。Bamboo在完成整个过程中,需要版本控制、制品仓库管理、配置管理的全程配合,如图6的部署基本流程演示了整个部署一体化实现流程。
3 结论
基于Bamboo的持续集成系统通过自动化手段为软件项目开发团队转变传统开发模式、实践持续集成思想提供了足够的平台支持,有利于项目快速反馈机制的建立、有利于尽早发现问题手段的完善,为软件的高质量交付创造条件。
参考文献
[1]Jez Humble,David Farley.持续交付-发布可靠软件的系统方法[M].北京:人民邮电出版社,2011:87-90.
[2]董越.软件集成策略:如何有效地提升质量[M].北京:电子工业出版社,2013,277-288.
[3]杜瓦尔,迈耶斯,格洛弗.持续集成软件质量改进和风险降低之道[M].北京:机械工业出版社,2008,59-66.
作者简介
段琳(1990-),女,白族,云南省大理市人。硕士研究生学位。研究方向为数字图像处理。
孙恒一(1989-),男,云南省玉溪市人。硕士研究生学位。研究方向为电力信息化。
作者单位
云南电网有限责任公司信息中心 云南省昆明市 650217