持续集成工具的选择
持续集成(continuous integration作为敏捷编程的基石现在已经被绝大多数的开发团队所广泛采用。而持续集成的工具现如今也是百花齐放,各有千秋,本文主要对比了在Java领域中比较常见的几种CI server(因为公司要求统一整个公司的CI server)。如果想了解更多的工具,可以看这里:http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix,这个网页集中了决大多数比较流行的CI server,但是我发现很多的内容已经落后于实际产品的功能了,所以如果要对比的话,可能要实际到产品的站点去看一下,最好还是下载下来运行起来看。
在本文中,我主要针对以下几种CI Server作对比,这也是公司里各个项目组目前自行选用的(版本有点多,国内的多选用了一些open source的,而老外那边用得比较多的是商用版本,CruiseControl和TeamCity是我加的,因为名气非常大。):
CruiseControl (http://cruisecontrol.sourceforge.net/ Hudson (https://hudson.dev.java.net/ LuntBuild (http://luntbuild.javaforge.com/ TeamCity (http://www.jetbrains.com/teamcity/ AntHill Pro (http://www.anthillpro.com/ Bamboo (http://www.atlassian.com/software/bamboo/ QuickBuild (http://www.pmease.com/
在持续集成领域,OpenSource的CruiseControl和LuntBuild可谓老牌了,尤其是CruiseControl,出自thoughtworks,这可是Martin Fowler的老巢啊。Hudson作为OpenSource里持续集成的后起之秀,现在已经赶超了这两个前辈,目前恐怕是使用最多的一个CI Server了。而后面4个是商用的CI Server,其中TeamCity是来自jetbrains的,jetbrains是开发著名的IDE IntelliJ的公司。Bamboo则是开发著名的Bug Tracking工具Jira和Wiki Confluence的公司atlassian公司出品的。AntHill也属于Continuous Integration界的元老,QuickBuild则是LuntBuild的商业版本,我在下面重点考量的是QuickBuild,因为LuntBuild好像现在更新较慢了,而且QuickBuild现在好像也有了免费的所谓的Community Edition,功能齐全,只是配置数有所限制。在这些商业版本中,TeamCity应该是目前市场占有率最高的。由于公司里比较倾向使用商业版本的服务器,所以我重点比较的是后4种,捎带比较了一下CruiseControl和Hudson。TeamCity和QuickBuild都有各自的免费版本,有兴趣的也可以去看看。
功能对比
CI Server在本质上就是一个定时调度器。我们配置一系列的项目,然后设定一个定时器,让它干一些活,然后通知大家。所以很多公司都使用所谓Home-made的工具,用cron+Ant/Maven来做持续集成,这个就已经可以达到CI的最简单的功能了。而使用工具,就是我们除了基本的编译和通知功能以外,我们还有很多其它的需求,在我们公司里,选择CI Server主要考虑以下几点:
便于公司的统一管理(大约有200+ Projects需要统一管理) 对于项目本身进行流程管理: Daily Build -> QA Build -> Release Build 和公司AD(Active Directory)的连接以对用户进行权限管理
Continuous Testing的支持,即对于项目的Test要能产生出详尽的报告以及收集Test的统计数据以作为项目的分析和考量
Continuous Code Quality Analysis的支持,即能处理项目产生的Coverage报告,Code的static analysis报告,并且能收集这些报告的统计数据以作项目的分析和考量
与SCM工具的集成,我们公司主要有三种VCS,ClearCase, Subversion和StarTeam 与其它工具的集成,如bug tracking工具,IDE集成等等。
首先,我们从安装的角度来查看一下
安装CI 安装是我们开始的第一步,同时也对各个CI server都有了初步的印象。按照各自的手册,很快就装好了,我基本上选择的是Standalone的版本,就是不配置数据库,使用自带的,也不deploy到Tomcat或者其它容器,这点,基本上每个CI Server都非常简单。所以也没看出什么好坏来。这里不得不提一下AntHill,有点小家子气,要download还得提交一个request,然后才能下载,安装,有点烦。
配置项目
在大多数的CI Server中,绝大部分都是以Project或者Project Group来进行管理,只有LuntBuild和QuickBuild比较另类,它们使用了Configuration这个术语,意即一个配置。在配置一个典型的项目的时候,即只处理基本的一个流程:CheckOut, Build, Publish Artifacts,这些工具都完成的非常好,也非常简单,我使用下来,觉得TeamCity的导航最方便,一目了然。而LuntBuild和QuickBuild在这方面稍显人性化不足,这两个工具都没有使用wizard的模式。
下面,我接着实验配置50个测试项目,这也就开始考验一个CI Server