|
|
|
|
移动端

PHP开发必备 PHP持续集成工具介绍(下)

在本文中,将介绍在目前软件工程中经常用到的持续集成概念,并且会介绍在PHP开发中,如何能用好PHP目前开源的一些持续集成管理工具,去管理好项目。

作者:廖煜嵘 译来源:IT168|2011-05-12 14:11

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

上一篇文章中,我们为大家介绍了一些PHP持续集成工具,在本文中,我们将介绍继续介绍PHP中的持续集成工具。

持续集成的概念

持续集成的概念是在现代软件工程中提出的,最早见于敏捷开发方法论中,大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

PHP MESS DECTOR

PHP MESS DECTOR(简称PMD,项目地址http://phpmd.org/),是基于pdepend的结果进行分析,分析出一旦你的PHP项目超过了pdepend中各具体指标值的规定,从而发出警告提示信息,安装方法如下:

  1. sudo pear channel-discover pear.phpmd.org  
  2. sudo pear channel-discover pear.pdepend.org  
  3. sudo pear install --alldeps phpmd/PHP_PMD 

使用方法为:

  1. phpmd . html codesize,unusedcode,naming,design --reportfile ../messdetector.html --exclude Tests/ 

上面这个命令含义为,使用pdepend中的4个规则codesize,unusedcode,naming,desgin去检查项目的代码,但除了Tests目录不作检查,检查结果生成HTML的格式,保存在/messdetector.html中,结果如下:

PHP开发必备 PHP持续集成工具介绍(下)
▲点击查看大图

PHP COPY PASTE DETECTOR

Php copy paste detector(https://github.com/sebastianbergmann/phpcpd)是重构的一个好工具,它用来发现你的项目中的重复代码。安装方法如下:

  1. sudo pear channel-discover pear.phpunit.de  
  2. sudo pear channel-discover components.ez.no  
  3. sudo pear install phpunit/phpcpd 

注意,必须先安装phpunit。运行方法如下图:

PHP开发必备 PHP持续集成工具介绍(下)

PHP DEAD CODE Detector

php dead code detector(https://github.com/sebastianbergmann/phpdcd)是一个检查你的项目中有哪些代码是从来没被调用过的,比如类,方法编写后再没被调用过,这是一个去掉“坏味道”代码的最佳实践,可以增强系统的可维护性。安装如下:

  1. sudo pear channel-discover pear.phpunit.de  
  2. sudo pear channel-discover components.ez.no  
  3. sudo pear install phpunit/phpdcd-beta 

运行方法下图:

PHP开发必备 PHP持续集成工具介绍(下)

综合持续集成工具 Jenkins

有了上面的各类工具,用户可以在PHP中进行持续集成构建的工作,但还可以使用一款综合的持续集成工具Jenkins(http://jenkins-ci.org/)进行(注:Jenkins其实就是原先的构建工具Hudson,只不过现在改了名称)。这款持续集成工具是个持续构建服务器,包含了上述提到的各种PHP持续构建工具的功能,安装好后,能做到每天持续构建,并将构建的结果通知用户。下面对其进行简单介绍。

Jenkins可以使用windows下的计划任务,LINUX下的SHELL以及ANT或者MAVN去进行构建项目,本文以使用ANT为例进行说明,首先必须安装JAVA中的ANT。编写ANT文件如下:

  1. <project name="Test" default="build" basedir=".">  
  2.     <property name="output" location="${basedir}/buildOutput/"/>  
  3.     <target name="init">  
  4.         <mkdir dir="${output}"/>  
  5.         <mkdir dir="${output}/phpcs/"/>  
  6.         <mkdir dir="${output}/pdepend/"/>  
  7.     </target>  
  8.  
  9.     <target name="build" depends="init, test, phpcs, phpmd, phpcpd, pdepend">  
  10.     </target>  
  11.  
  12.     <target name="test">  
  13.         <exec executable="phpunit" failonerror="true">  
  14.             <arg line="--coverage-clover ${output}/CodeCoverage/clover.xml  
  15.                 --coverage-html ${output}/CodeCoverage/  
  16.                 ."/>  
  17.         </exec>  
  18.     </target>  
  19.  
  20.     <target name="phpcs">  
  21.         <exec executable="phpcs">  
  22.             <arg line="--report=checkstyle  
  23.                           --report-file=${output}/phpcs/checkstyle.xml  
  24.                           --standard=Zend  
  25.                           ${basedir}" />  
  26.         </exec>  
  27.     </target>  
  28.  
  29.     <target name="phpmd">  
  30.         <exec executable="phpmd">  
  31.             <arg line="  
  32.                  . xml codesize,unusedcode,naming,design --reportfile ${output}/messdetector.xml --exclude Tests/  
  33.             " />  
  34.         </exec>  
  35.     </target>  
  36.  
  37.     <target name="phpcpd">  
  38.         <exec executable="phpcpd">  
  39.             <arg line="  
  40.                  --log-pmd ${output}/phpcpd.xml .  
  41.             " />  
  42.         </exec>  
  43.     </target>  
  44.  
  45.     <target name="pdepend">  
  46.         <exec executable="pdepend">  
  47.             <arg line="  
  48.                 --jdepend-xml=${output}/pdepend/jdepend.xml  
  49.                 --jdepend-chart=${output}/pdepend/dependencies.svg  
  50.                 --overview-pyramid=${output}/pdepend/overview-pyramid.svg  
  51.                 --ignore=Tests/  
  52.                 .  
  53.             " />  
  54.         </exec>  
  55.     </target>  
  56. </project> 

熟悉ANT的读者应该知道,这里其实是调用了以上说的各个PHP持续集成工具而已。

接下来,是安装Jenkins,到Jenkins的官网去下载相符合的操作系统版本,然后就可以按照指引安装,本文以在Ubantu上的安装方法为例说明:

  1. wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add –  
  2. 在/etc/apt/sources.list文件最后增加如下这行:  
  3. deb http://pkg.jenkins-ci.org/debian binary/  
  4. sudo apt-get update  
  5. sudo apt-get install jenkins 

之后就可以安装成功了,可以通过http://localhost:8080/ 去访问Jenkins了,初始界面如下图:

PHP开发必备 PHP持续集成工具介绍(下)

Jenkins的设置

Jenkins的设置比较复杂,在这里不一一详细论述。但这里稍微提下设置的基本方法。只需要点上图中的“Manage Jenkins”链接,再点“Configure System”则可进入设置面板,其中你可以设置相关的权限设置,也可以设置SMTP用来通知每次的构建成功与否的信息。此外,需要设置Jenkins中的插件设置,要打开相关的插件设置开关,比如使用Git做版本控制工具的,则要设置Git插件为允许状态。设置的步骤很简单,选择“plugin”,点“Install”即可安装,安装后要重新启动Jenkins。

我们需要安装一系列的插件去实现php的持续集成,比如安装Clover(https://wiki.jenkins-ci.org/display/JENKINS/Clover+Plugin)去图形化显示phpunit的单元测试覆盖率,安装Checkstyle(https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin)去显示PHP CodeSniffer的运行结果,也要安装PMD,而Jdepend(https://wiki.jenkins-ci.org/display/JENKINS/JDepend+Plugin)用来显示PHP Depend的结果。

在完成基本设置后,我们可以首先新建立一个Job,点“New Job”链接,给Job命名,之后,我们可以按照http://jenkins-php.org/一文中的教程进行设置,之后就可以运行构建了,下面是两个典型的构建运行图:

PHP开发必备 PHP持续集成工具介绍(下)

PHP开发必备 PHP持续集成工具介绍(下)

可以看到,Jenkins的每次构建,都能综合运用了本文所谈到的各样php集成工具,十分方便,而且能提供十分丰富的图形报表。

总结

持续集成应该成为你日常项目管理运行维护的重要步骤,通过每天构建项目,能达到敏捷软件工程学中的最佳实践,提高系统的可靠性,减少系统潜在的bug,由于篇幅所限,更多的持续集成工具用法在以后的文章中将会详细论述,读者可参考各工具的参考手册进行学习。

【编辑推荐】

  1. PHP程序员突破成长瓶颈
  2. 五个常见 PHP数据库问题
  3. 是什么造成PHP远程文件包含漏洞产生
  4. 为什么说PHP是个集中营
【责任编辑:QiHappy TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

解密SEO:搜索引擎优化与网站成功战略

本书是作者根据十年网站营销经验,特别是搜索引擎优化(SEO)实现营销方面的技术和实践总结。本书帮助读者建立搜索营销的概念,分析搜索营...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊