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

Mac OS Lion系统下安装apache,php,pear和phpunit

八月上班的第一天,加入项目组了,准备开始学习测试
============================
使用MacOS Lion还是不错的,想着做开发应该没啥问题吧,php嘛。但是实际操作起来还是有很多不同的。
首先他自带了php 5.3.6,版本很新啊,和apache2,所以就不需要装了
在命令行下直接php命令就可以了,但是如果要打开apache的功能,还需要做一些操作
开启apache对php的支持
在/etc/apache2/httpd.conf中,打开LoadModule php5_module libexec/apache2/libphp5.so这一项
然后去系统偏好设置,共享中打开web共享,然后访问http://localhost可以看到久违的It works!
自己设置的网站是在 ~/Sites/文件夹下,对应的url是
http://localhost/~[your_user_name]/index.php
可以使用常用的phpinfo()来试一下开通了没有。

然后就要开始装pear了
cd /usr/local下,然后使用
curl http://pear.php.net/go-pear | sudo php
命令,发现php版本太新了,提示用go-pear.phar > go-pear.php文件才行
安装完成如果发现pear命令可以用了,那就说明好了,如果还不行的话,就百度一下吧⋯⋯

开始安装phpunit
首先升级pear,使用 pear upgrade pear
然后添加pear的频道
pear channel-discover components.ez.no

pear channel-discover pear.phpunit.de

pear channel-discover pear.symfony-project.com

之后使用
pear install –alldeps –force phpunit/phpunit
即可完成安装
安装完成如果运气好的话,比如我在xp下面,就可以直接使用phpunit命令了,
但是在mac下还是不行,提示
PHP Warning: require_once(PHP/CodeCoverage/Filter.php): failed to open stream:
No such file or directory in phpunit on line 38
我先用pear install phpunit/PHP_CodeCoverage命令装了,还是不行。
肯定就是路径问题,可以使用修改include_path的方法,但是不太明白,所以
打开pear目录下phpunit在

学习php?

发现技术用来用去虽然说只有那几种,但是不一定每次你都能用到想用的技术。
以前最熟悉的是java,但是实验室开发就偏要用c++ mfc
做过的网站都是jsp和ssh框架的,但是来了百度之后就要学习php,还好数据库一般都是mysql,但是实验室就偏要用mssql。哈哈。至今还没有用过oracle,估计以后工作了就会用到的。

————以上废话—————–
1. php + zend框架、就是类似ssh的一个mvc框架,有自己的controller,view和model,挺好用的
2. 用zend studio写php还是比较顺手,本身就是基于eclipse开发的,而且不用编译,省去了jsp页面总是要重新发布的麻烦事
3. extjs和jquery都算是接触了,还是挺好用的。 extjs风格有点诡异,不过还是基于dom操作和定义的一些框架而已。
4. php script也还是不错的,写了一个识别验证码的。不知道用python会不会更好用,可惜一直想用python没有机会通过实践来学习。

百度实习第十天,期待lion的发布~