持续集成的工具已经是铺天盖地,有商业化的软件,也有开源的软件。覆盖的CI功能也是多种多样。

从功能角度分,就笔者的学习经验而言,最关键的是三类:版本控制工具、构建工具、CIContinuous integration)服务器。而其中最核心的又是构建工具。其他开源的、与持续集成相关的工具也有很多,但大多数是辅助性的工具。

笔者学习持续集成时所选择的工具为:SVNMavenJenkins

 

一、主要工具

(一)、版本控制工具

有时,版本控制又称为配置管理(SCM),所以版本控制工具同时也是配置管理工具。在各类版本控制的开源软件中,最著名的莫过于CVSSVNSubversion)、GIT三个了。

这三个工具各有千秋。其中,GIT支持离线工作,更适合开源软件或者开发人员不能集中办公情况下的版本管理工作。同时,SVNGIT可以配合使用。

SCM工具

江湖地位

控制方式

原子提交

并发冲突解决

权限管理

支持变更范围

CVS

资格最老,但逐渐衰退

集中式

NO

排它锁

方法有限

文件

SVN(Subversion)

CVS的升级,目前较为主流

集中式

YES

合并模式(通知冲突)

支持目录级。通过工具可支持文件级

文件、目录

GIT

Eclipse.org上使用最多

分布式

YES

合并模式

权限配置较为困难

文件、目录

 

(二)、构建工具

构建工具是持续集成的核心,它对源代码进行自动化编译、测试、代码检查,以及打包程序、部署(发布)到应用服务器上。从配置管理工具上下载最新源代码后,所有的后续工作几乎都可以通过构建工具完成。

java开发中,比较有名的构建工具就是AntMaven。在PHP开发中,Phing基于Ant)也比较有名。同样的,Maven也可通过相关的PHP-Maven插件完成对PHP开发构建的支持。

构建工具

江湖地位

主要特点/优势

主要劣势

Ant

老牌的构建工具,目前仍有很强生命力

l  自由、灵活

l  应对复杂项目时很有利

l  用法符合一般人的思维习惯

l  引入第三方软件框架时, jar包管理比较困难

Maven

Ant势均力敌

l  约定优于配置;

l  第三方jar包管理方便

l  用法不太符合一般人的思维习惯

l  需要搞懂许多默认约定(比如默认的目录结构)

 

(三)、CI服务器

CI服务器的主要作用就是提供一个平台,用于整合版本控制和构建工作,并管理、控制自动化的持续集成。

开源软件中,比较有名的CI服务器包括JenkinsCruiseControlContinuum。而比较有名的商业化CI服务器是TeamCityBambooPulse等。

CI服务器

江湖地位

主要优、劣势

支持的SCM工具

支持的构建工具

Jenkins(即原来的Hudson)

目前最为主流

l  基于WEB,操作方便

l  插件众多,支持多种高级功能

主要专注于CVSSVN…

Mavenantshell…

CruiseControl

成熟健壮,使用人员较多

l  通知技术一流

l  配置、维护较为困难

CVSSVNVSSCM Synergy…

Mavenantmake、命令行脚本(shell

Continuum

轻量级CI平台,现在使用较少

l  基于WEB,易于安装

l  功能相对不够丰富

l  用户界面难以使用

SVN/CVS/Starteam/Clearcase/Perforce…

Mavenantshell…

 

二、其他工具

很多工具可以通过与构建工具、CI工具相结合(当然,其中有很多工具也可以单独工作),来完成更多的自动测试、报告生成等工作。根据工具不同,其具体的结合方法也不同,但大体都是通过插件形式进行结合的。例如:

l  Maven中通过依赖和plugin方式引入第三方工具

l  Jenkins主要通过各类插件引入第三方工具

这些工具种类实在太多,可以根据实际工作需要进行选择。

工具种类

主要工具(主要用于java开发)

单元测试

JuintPHPUnitfor PHP

静态代码检查

FindbugsCheckstylePMD

测试覆盖统计

Coberturaclover

负载和性能测试

Jmeter

记录代码质量度量

violations

……

……

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐