月度归档:2011年09月

回家小感

家永远都会记得你,不管你在哪里,离开了多久。
谈钱伤感情,谈感情伤钱。
淡定才是王道
闲言闲语远比事实更加可怕。
小家和大家都是家,但是要有轻重缓急。小家永远才是最重要的。
结婚仪式的时候相互说“我愿意”的那个瞬间,如果大家都能够记住当时的感觉,也就不会有那么多背叛和离异了。
钱有时候真的是王道,在不忽视感情的前提下。

Hudson持续集成PHP实践

一、什么是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