一、什么是Hudson?
CI:Continuous Integration,持续集成,是一种软件开发实践,即团队开发成员经常集成它们的工作,每天可能会发生多次集成,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误,也可得到增量式的可发布文件。
Hudson:是一个基于Java实现的可扩展的持续集成(CI)引擎,主要用于:
1) 持续、自动地构建/测试软件项目(主要用途)
2) 监控一些定时执行的任务(比如定时发送集成结果到你的邮箱)
3. Hudson的特点:
1) 使用方便,只要将Hudson提供的Hudson.war部署到你的servlet服务器上即可(Tomcat或者Jboss)
2) 分布式构建支持,Hudson能够让多台计算机一起构建/测试
3) 可以生成xUnit测试报告,可以很直观的看到测试结果
4) 插件支持:Hudson可以安装多种插件,从而完成你所需要的各种集成要求,并且可以支持非Java工程的集成(这个对我们很重要,我们项目大多采用PHP)
二、使用Hudson
Hudson的安装
1) Hudson是基于Java开发的,需要部署到Web服务器上,我们所使用的Web服务器是Tomcat,而Tomcat的运行需要JRE的支持,所以运行Hudson首先要安装JRE和Tomcat。
2) 安装好JRE和Tomcat之后开始安装Hudson:
java -jar hudson.war -Dhudson.security.ExtendedReadPermission=”true” 1>>hudson.log 2>>hudson.log.wf &
拷贝hudson.war到Tomcat网站根目录下,执行以上命令,解压hudson.war并且记录日志把stdout到hudson.log ,stderr到hudson.log.wf
2.插件安装
由于hudson默认只支持Java项目,为了让它支持PHP项目的构建和自动化测试需要其他的一些工具和插件的支持,我们需要的工具和插件大体上有:
1) Ant:是一种基于Java的build工具(编译打包工具),它有些类似于(Unix)C中的make ,但没有make的缺陷,ant脚本基于xml,所有的脚本都是xml文件,结构简单书写方便(具体格式百度一下),需自己安装。
2) Phing:一个基于Ant的PHP项目构建系统.名字为PHing Is Not GNU make 的缩写(可以完成GNU make的所有功能,但使用较方便)
3) Phing plugin: 为Hudson提供Phing支持的插件
4) SVN:版本控制工具
5) PHPUnit:PHP单元测试工具
6) Clover: Clover 是一个测试代码覆盖率分析工具, 在软件测试过程中,它帮助查找有哪些没有被充分执行的方法、语句和判断条件,Clover 会把覆盖率分析结果以HTML、PDF等格式进行报告。Clover 是商业工具,但它可以免费用于开放源码项目。
7) Clover plugin:为Hudson提供Clover的支持
8) PCPD(phpcpd):PHP copy paste detector,重构工具,通过对项目源文件分析可以发现项目中可重构代码
9) PHP_Depend(pdepend):源代码检查工具,通过对源代码进行静态分析得到抽象语法树和Software Metric以对代码质量进行度量。
10) PMD(PHP MESS DETECTOR):基于pdepend的结果进行分析,对超过pdepend的具体指标的值显示提示信息。
11) phpDocumentor(phpdoc):可以从PHP源代码直接得到完整说明文档。
12) PHP CodeSniffer(phpcs):基于PHP5的程序,用来检查代码是否符合代码标准(默认标准为PEAR Coding Standard)
13) Checkstyle plugin:本插件收集来自Checkstyle的分析结果,并将分析之后的提示展现出来。
三、Hudson Trouble Shooting
1.插件版本升级,名字可能会有变化,但是通过功能描述可以找到对应的插件
2.新建任务时,一般选择“构建一个自由风格的软件项目”
3.任务配置时,SVN设置,建议最好有SVN Browser,不然update代码时的构建会出问题,另外查看不到代码变更集信息。
4.SVN设置时,建议选择Use update,否则会每次构建都会全部重新check out代码,效率低。
5.Build触发设置,Poll SCM是指在有代码变更的触发之后,会按照什么样的Schedule进行构建。
比如:选择Poll SCM,Schedule填 30 * * * *,指有代码变更的那个时间点之后的下一个xx:30的时候构建一次
6.创建完任务之后,需要手动修改jobs/工程目录下的build.xml文件,他是一个ant脚本
7.Ant脚本中,target build位于脚本最后,它依赖于clean, phpcpd, pdepend, phpmd, phpcs, phpunit, code-coverage等target的执行。
注意clean的位置是在最前,如果在之后的话,会删除之前构建的文件,造成无法访问构建结果的error