持续集成简单总结

时间:14-06-17 栏目:敏捷开发测试 作者:乐测网 评论:0 点击: 724 次

一、理论篇:

 

持续集成鼓励尽量短周期内项目团队的代码提交,同时保证每次check in都不会损害我们的构建通过。它跟每日构建的区别就在于代码提交频率更高(一般为一个小时),构建的频率也更高,这样做的目的就是为了快速反馈,使得BUG越早被发现,并能以邮件或者消息(甚至短信)的形式快速反馈给开发人员,从而快速解决问题,并保证构建成功。

 

二、工具篇:

 

持续集成重在COC(Conversion Over Configuration:约定由于配置),这样选择合适的支持持续集成的工具就相当重要。庆幸的是我们有许多开源的选择,但是首先我们需要了解持续集成的实现架构:

e01dc788-857d-3856-a5bd-d79613bc3351

从上图中我们看到,客户端提交代码更改到源代码仓库,CI服务器会检测到代码库的修改,它会检出代码,在本地构建,构建成功,会将构建结果反馈回客户端,同时可能将构建的可运行代码发布到WEB服务器上。

所以,我们就需要各个节点的工具支持:

对于SCM工具,我们的选择的开源工具有CVS、SVN等,这也没有特殊的取舍,就自己的爱好和公司的已有平台而定。我们这里假设使用SVN作为版本管理工具,它的中文站是:http://www.subversion.org.cn/ ;

对于构建工具,我们的选择的开源工具有Ant和Maven等,Ant通过一些内置的和扩展的Task来实现包括文件操作、编译、测试、代码检查、打包等操作,Eclipse默认提供了对Ant的支持。通过在build.xml中配置一系列相互依赖的任务来实现我们定义的构建过程。Maven是一个以项目为模型的构建,项目管理工具,注意它并不是为了替代Ant(同时支持运行Ant脚本),而是以另一种视觉提供了对软件生命周期的管理,它通过插件的方式提供了类似于Ant任务的功能,它的特色之处在于对项目依赖组件的统一管理,同时它的生成站点功能也是一个不错的特性,具体不再赘述,后面的构建我们会分别用Ant和Maven来说明。

对于持续集成工具,我们的选择的开源工具有CruiseControl(后面简称CC)和Hudson。BuildLoop是CC的核心, 这个BuildLoop包含插件支持,详细介绍可以参照附件中的电子书。CC的实施结构如下图所示:

d5ad3634-13fb-3e80-ad4f-227ca0844878

为了完成上面的结构,CC提供的插件按照下图所示的流程完成构建:

5ce62442-3717-3eb9-8be2-16e8bfc634d0

通过对CC的cruisecontrol项目的配置,支持图形化显示checkstyle, pmd, findbugs, cobertura, javadoc等报告。同时CC-Config也提供了对项目的图形化配置,比较方便。

Hudson也提供了持续集成服务器的大多数功能,详细参考官方站点:https://hudson.dev.java.net/

 

三、实践篇:

 

         我们模拟了两个项目,一个AntBasedCI是基于Ant构建的客户端应用程序,一个MavenBasedCI是基于Maven构建的Web应用程序,我们的SCM由SVN自带的Server提供,启动这个服务,我们需要在命令行运行: svnserve -d -r D:\repos 其中-r指定repository磁盘位置。

CC的项目配置:

上面的配置是通过CC-Config图形配置自动生成的,包含我们的两个工程。

Ant配置build.xml


从上面的配置我们看到这个构建包括:编译、测试、测试覆盖率统计、代码检查、BUG查找、生成Javadoc和打包。

Maven的配置pom.xml


 

Maven详细的站点生成可以参考这里:http://www.duduwolf.com/wiki/2008/766.html

Maven生成的站点例子:

9f8bc78d-829b-3880-b83c-4c2b601b5d99

CC生成的集成报告截图如下:

0b562299-103c-3957-a8fd-363278326e63 

  四、总结篇:

 通过上面的简单介绍,我们基本掌握了持续集成的目的和基本理论,在Martin Fowler的文章中提到了一些最佳实践也值得参考。当然持续集成是一个在实践中不断发展和完善的过程,对于一个团队而言,引入持续集成对于提高开发效率和规范开发过程是必需的,不过在整个持续集成中,我们信赖的依据就是构建,其中的单元测试可靠性就会有一定的要求,这样对于我们开发人员,如何保证写出高质量的单元测试便是一个挑战,TDD是一个不错的实践,它完全从需求出发,逐步完善测试用例,不断减少与需求的偏差来尽量满足需求。同时引入测试覆盖率也利于我们审查我们的单元测试。CC提供的统一出口的各种报告和图表,可以更加直观和快捷的从整体上把握我们代码在构建中表现出来的健壮性(代码检查)和满足需求性(单元测试通过率、测试覆盖率),同时对于出现的问题,能够责任到人,快速反馈也是很有利于问题的解决,对于持续集成的学习刚刚开始,错误偏颇在所难免,越是深入的学习,越会有更多的感悟和思考。

五、参考:

1、Martin Fowler的文章

原文:http://martinfowler.com/articles/continuousIntegration.html
翻译:http://dev.csdn.net/develop/article/12/12286.shtm

2、Juven的一篇原创文章

http://juvenshun.spaces.live.com/blog/cns!CF7D1BC903C111E1!284.entry

3、IBM DW上的一篇教程,以Hudson为例

https://www6.software.ibm.com/developerworks/cn/education/java/j-cq11207/index.html

4、满江红开源上提供的CruiseControl教程下载

http://www.xiaxin.net/blog/OpenDoc-CruiseControl.zip

5、IBM DW上的另外一篇文章讲解如何实现持续集成

http://www.ibm.com/developerworks/cn/rational/rationaledge/content/nov05/lee/

声明: 本文由( 乐测网 )原创编译,转载请保留链接: 持续集成简单总结

持续集成简单总结:等您坐沙发呢!

发表评论(需填写下方的验证回答,无用户名的评论将视为匿名发表,您也可以登陆或注册后再发表评论)

您必须 [ 登录 ] 才能发表留言!

@关注乐测网

-----==== 本站公告 ====-----
1.本站是目前唯一能支持智能手机平板电脑访问的软件测试技术网站.
2.具体访问方法请参考本站的手机访问说明,或直接点击以下链接:

→点击这里打开手机平板访问说明←

    智能手机平板电脑访问方法

1.用手机浏览器输入本站网址http://www.test666.com就可直接访问
2.微信、QQ、微博或手机浏览器的二维码扫描功能扫描以下二维码图

标签云球