基于Jenkins实现php项⽬的⾃动化测试、⾃动打包和⾃动部署原⽂
本篇博⽂宅鸟将在上篇: 的基础上,继续介绍结合php项⽬实现⾃动化测试和⾃动部署。废话不再多说,直接上⼲活。
宅鸟所使⽤的为Ubuntu
要实现在jenkins中实现的⾃动化测试,⾸先需要Jenkins服务器上安装php测试框架,php的测试框架很多,在这⾥我们选择 PHPUnit Framework.
sudo apt-get install phpunit
PHP Warning: require_once(PHP/CodeCoverage/Filter.php): failed to open stream: No such file or directory in /usr/bin/phpunit on line 39
PHP Fatal error: require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php' (include_path='.:/usr/share/php:/usr/share/pear') in /usr/bin/phpunit on line 39
1sudo pear channel-discover pear.phpunit.de
2sudo pear channel-discover pear.symfony-project
3sudo pear
4sudo pear channel-discover pear.symfony
5sudo pear update-channels
6sudo pear upgrade-all
7sudo pear install pear.symfony/Yaml
8sudo pear install --alldeps phpunit/PHPUnit
9sudo pear install --force --alldeps phpunit/PHPUnit
安装后执⾏phpunit --version 返回版本信息。表⽰安装成功。
root@dop-kvm-2:# phpunit --version
PHPUnit 3.7.28 by Sebastian Bergmann.
下⾯我们开始给Jenkins⼀些插件:
Subversion/Git:⽤于集成项⽬版本控制软件,根据需要选择(在上篇博⽂已安装使⽤)
Phing/Ant:使⽤Phing或Apache Ant 对PHP项⽬做⾃动化构建
CheckStyle:使⽤PHP CodeSniffer进⾏代码风格检查的⼯具。⽤于检查PHP代码是否有违反⼀组预先设置好的编码标准的⼀个PEAR包,内置了ZEND,PEAR的编码风格规则
Clover PHP:使⽤phpunit进⾏单元测试的⼯具,可以被xdebug扩展⽤来⽣成代码覆盖率报告,并且可以与phing集成来⾃动测试,还可以和Selenium整合来完成⼤型⾃动化集成测试
DRY:使⽤PHPCPD(php copy paste detector)来发现项⽬中的重复代码
HTML Publisher:⽤来发布phpunit代码覆盖率报告
JDepend:使⽤PHP Depend分析php中静态代码,⽤来检查项⽬中的代码规模和复杂程度
Plot:使⽤phploc来统计php项⽬规模⼤⼩的⼯具,可以统计php的项⽬代码⾏数
PMD:使⽤phpmd(php mess dector),对基于pdepend的结果进⾏分析,⼀旦项⽬超过了pdepend中各具体指标的规定,将发出警告信息. Violations:按照代码缺陷严重性集中显⽰pwd静态代码分析的结果
xUnit:使⽤JUnit的格式来输出phpunit的⽇志⽂件
注意这些插件是jenkins为php项⽬所提供的⼀些插件,但并不是必须的,所以宅鸟只把最值得⼤家关注的怎么、打包和发布来给⼤家讲解。
1root@dop-kvm-2:/home/jenkins/api# tree
2.
3├── aa.php
4├── l
5├── create.php
6└── test
7├── DemoTest.php
8└── FunctionTest.php
9 1 directory, 5 files
aa.php、create.php是项⽬的程序⽂件
test⽬录下的DemoTest.php和FunxtionTest.php是项⽬的测试⽂件
⾸先给出项⽬需要的l⽂件:
<?xml version="1.0" encoding="UTF-8"?>
<project name="api" default="build">
<target name="build" depends="make_runtime,phpcs-ci,phploc,pdepend,phpcb,phpunit,phpdox,phpcpd"/> <property name="version-m" value="1.1" />
<property name="version" value="1.1.0" />
<property name="stability" value="stable" />
<property name="releasenotes" value="" />
<property name="tarfile" value="${phing.project.name}.${buildnumber}.${buildid}." />
<property name="pkgfile" value="${phing.project.name}.${version}.tgz" />
<property name="distfile" value="dist/${tarfile}" />
<property name="tests.dir" value="test" />
<fileset id="" dir=".">
<include name="test/**"/>
<include name="*.php"/>
<include name="*.xml"/>
</fileset>
<target name="make_runtime">
<mkdir dir="${project.basedir}/Runtime" />
<mkdir dir="${project.basedir}/build/logs" />
<mkdir dir="${project.basedir}/build/pdepend" />
<mkdir dir="${project.basedir}/build/code-browser" />
</target>
<target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer">
<exec executable="phpcs">
<arg value="--standard=${project.basedir}/l" />
<arg value="--ignore=autoload.php" />
<arg path="${project.basedir}/" />
</exec>
</target>
<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer">
<exec executable="phpcs" output="${project.basedir}/build/build.log">
<arg value="--report=checkstyle" />
<arg value="--report-file=${project.basedir}/build/l" />
<arg value="--standard=${project.basedir}/l" />
<arg value="--ignore=" />
<arg path="${project.basedir}/" />
</exec>
</target>
<target name="phploc" description="Measure project size using PHPLOC">
<exec executable="phploc">
<arg value="--log-csv" />
<arg value="${project.basedir}/build/logs/phploc.csv"/>
<arg path="${project.basedir}/"/>
</exec>
</target>
</target>
<target name="pdepend" description="Calculate software metrics using PHP_Depend">
<exec executable="pdepend">
<arg value="--jdepend-xml=${project.basedir}/build/l"/>
<arg value="--jdepend-chart=${project.basedir}/build/pdepend/dependencies.svg"/>
<arg value="--overview-pyramid=${project.basedir}/build/pdepend/overview-pyramid.svg"/> <arg path="${project.basedir}/"/>
</exec>
</target>
<target name="phpmd" description="Perform project mess detection using PHPMD">
<exec executable="phpmd">
<arg path="${project.basedir}/"/>
<arg value="text"/>
<arg value="${project.basedir}/l"/>
</exec>
</target>
<target name="phpmd-ci" description="Perform project mess detection using PHPMD">
<exec executable="phpmd">
<arg path="${project.basedir}/"/>
<arg value="xml"/>
<arg value="${project.basedir}/l"/>
<arg value="--reportfile"/>
<arg value="${project.basedir}/build/l"/>
</exec>
</target>
<target name="phpcpd" description="Find duplicate code using PHPCPD">
<exec executable="phpcpd">
<arg value="--log-pmd"/>
<arg value="${project.basedir}/build/l"/>
<arg path="${project.basedir}/"/>
</exec>
</target>
<target name="phpdox" description="Generate API documentation using phpDox">
<exec executable="phpdox"/>
</target>
<target name="phpunit" description="Run unit tests with PHPUnit">
<exec executable="phpunit" />
</target>
<target name="test" description="Run PHPUnit tests">
<phpunit haltonerror="true" haltonfailure="true" printsummary="true">
<batchtest>
<fileset dir="${tests.dir}">
<include name="**/*Test.php" />
</fileset>
</batchtest>
</phpunit>
</target>
<target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser">
<exec executable="phpcb">
<arg value="--log"/>
<arg path="${project.basedir}/build/logs"/>
<arg value="--source"/>
<arg path="${project.basedir}/"/>
<arg value="--output"/>
<arg path="${project.basedir}/build/code-browser"/>
</exec>
</target>
<target name="check" description="Check variables" >
<fail unless="version" message="Version not defined!" />
<fail unless="buildnumber" message="buildnumber not defined!" />
<fail unless="buildid" message="buildid not defined!" />
<delete dir="dist" failonerror="false" />
阅读l后,⼤家可以了解⼀下内容:ant安装包
项⽬名称、版本、打后的包名称:
<project name="api" default="build">
<target name="build" depends="make_runtime,phpcs-ci,phploc,pdepend,phpcb,phpunit,phpdox,phpcpd"/> <property name="version-m" value="1.1" />
<property name="version" value="1.1.0" />
<property name="stability" value="stable" />
<property name="releasenotes" value="" />
<property name="tarfile" value="${phing.project.name}.${buildnumber}.${buildid}." />
<property name="pkgfile" value="${phing.project.name}.${version}.tgz" />
<property name="distfile" value="dist/${tarfile}" />
<property name="tests.dir" value="test" />
打包时包括的⽂件和⽂件夹:这⾥还可以使⽤ exclude 排除⽂件和⽂件夹:
<fileset id="" dir=".">
<include name="test/**"/>
<include name="*.php"/>
<include name="*.xml"/>
</fileset>
<target name="phpunit" description="Run unit tests with PHPUnit">
<exec executable="phpunit" />
</target>
<target name="test" description="Run PHPUnit tests">
<phpunit haltonerror="true" haltonfailure="true" printsummary="true">
<batchtest>
<fileset dir="${tests.dir}">
<include name="**/*Test.php" />
</fileset>
</batchtest>
</phpunit>
</target>
了解这些后,我们开始在jenkins中新建autoTestTarAndPublish项⽬,选择:构建⼀个⾃由风格的软件项⽬:并且指定好代码库:如图所⽰
然后再 增加构建步骤->Invoke Phing targets:
增加两个 target: test,tar 分别与l中的test,tar名称相对应
然后在左边主菜单: 系统管理->系统设置->Publish over SSH 下添加主机:(这⾥宅鸟设置使⽤ssh免密码登陆)需要设置成从jenkins到要发布的web服务器的⽆密码登陆
这⾥添加设置的主机名是:134
接下来我们就可以设置部署⼯作了:
在添加构建步骤下来表中选择:Send files or execute commands over SSh,如果该选项未出现需要在插件管理中安装插件: 然后重启jenkins即可.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论