ビルドファイル修正版
Ant用ファイルとPhing用ファイルに分けて、Jenkins側でそれぞれのxmlを指定するようにした。
一応これですべてJenkins上で見られる。
カバレッジレポートはcloverで出してるが、namespace対応できていないっぽくてHTMLレポートでとび先が404になる。
原因は対象クラスファイル名がそのままHTMLになること。
サマリは出るけど、末端はファイルが出力されていなかった。
これはあきらめる。
あとignoreとかexclude指定がはまった。
なかなかうまく除外してくれなかった。
Phing用ビルドファイル
<?xml version="1.0" encoding="utf-8" ?> <project name="pofc" default="all"> <!-- comment --> <property name="basedir" value="./" /> <property name="output" value="${basedir}/build/logs" /> <property name="src" value="${basedir}/src" /> <property name="tests" value="${basedir}/tests" /> <property name="ignore" value="${src}/library/Zend/*" /> <target name="all" depends="prepare,lint,pdepend,phpmd,phpcs,phpcpd,phpunit,docblox"></target> <target name="clean" description="Cleanup build artifacts"> <delete dir="${basedir}/build/api"/ datetime="2012-03-10T10:56:55+09:00"> <delete dir="${basedir}/build/code-browser"/ datetime="2012-03-10T10:56:55+09:00"> <delete dir="${basedir}/build/coverage"/ datetime="2012-03-10T10:56:55+09:00"> <delete dir="${basedir}/build/logs"/ datetime="2012-03-10T10:56:55+09:00"> <delete dir="${basedir}/build/pdepend"/ datetime="2012-03-10T10:56:55+09:00"> </target> <target name="prepare" depends="clean" description="Prepare for build"> <mkdir dir="${basedir}/build/api"/> <mkdir dir="${basedir}/build/code-browser"/> <mkdir dir="${basedir}/build/coverage"/> <mkdir dir="${basedir}/build/logs"/> <mkdir dir="${basedir}/build/pdepend"/> </target> <!-- phing --> <target name="lint"> <phplint haltonfailure="true" cachefile="${output}/lint_lasttime"> <fileset dir="${src}"> <include name="**/*.php" /> <exclude name="library/Zend/**/*.php" /> </fileset> </phplint> </target> <!-- phing --> <target name="pdepend" description="Calculate software metrics using PHP_Depend"> <phpdepend> <fileset dir="${src}"> <include name="**/*.php" /> <exclude name="library/Zend/**/*.php" /> </fileset> <logger type="jdepend-xml" outfile="${output}/jdepend.xml"/> <logger type="jdepend-chart" outfile="${basedir}/build/pdepend/dependencies.svg"/> <logger type="overview-pyramid" outfile="${basedir}/build/pdepend/overview-pyramid.svg"/> <analyzer type="coderank-mode" value="method"/> </phpdepend> </target> <!-- phing --> <target name="phpmd"> <phpmd rulesets="${basedir}/build/phpmd.xml"> <fileset dir="${src}"> <include name="**/*.php" /> <exclude name="library/Zend/**/*.php" /> </fileset> <formatter type="xml" outfile="${output}/pmd.xml"/> </phpmd> </target> <!-- phing --> <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server"> <phpcodesniffer standard="Zend" allowedFileExtensions="php" showSniffs="true" showWarnings="true"> <fileset dir="${src}"> <include name="**/*.php" /> <exclude name="library/Zend/**/*.php" /> </fileset> <formatter type="checkstyle" outfile="${output}/checkstyle.xml" /> </phpcodesniffer> </target> <!-- phing --> <target name="phpcpd"> <phpcpd minTokens="10"> <fileset dir="${src}"> <include name="**/*.php" /> <exclude name="library/Zend/**/*.php" /> </fileset> <formatter type="pmd" outfile="${output}/pmd-cpd.xml"/> </phpcpd> </target> <!-- phing --> <target name="phpunit" description="Run unit tests with PHPUnit"> <coverage-setup database="${output}/coverage.db"> <fileset dir="${src}"> <include name="**/*.php" /> <exclude name="bootstrap.php" /> <exclude name="public/**/*.php" /> <exclude name="library/Zend/**/*.php" /> </fileset> </coverage-setup> <phpunit codecoverage="true" bootstrap="${src}/bootstrap.php"> <formatter type="xml" outfile="${output}/junit.xml" /> <formatter type="clover" outfile="${output}/clover.xml" /> <batchtest> <fileset dir="${tests}"> <include name="**/*Test.php" /> </fileset> </batchtest> </phpunit> <coverage-report outfile="${basedir}/build/coverage/coverage.xml"> <report todir="${basedir}/build/coverage" /> </coverage-report> </target> <!-- phing --> <target name="docblox" description="genarate API Document from Docblox"> <exec executable="docblox.bat"> <arg line="run -c ${basedir}/build/docblox.xml" /> </exec> </target> </project>
Phing用ビルドファイル内で指定しているDocBlox設定ファイル
<?xml version="1.0" encoding="UTF-8" ?> <docblox> <title>My project</title> <parser> <target>./build/api</target> <markers> <item>TODO</item> <item>FIXME</item> </markers> <extensions> <extension>php</extension> </extensions> <visibility></visibility> </parser> <transformer> <target>./build/api</target> </transformer> <logging> <level>warn</level> <paths> <default>./build/docblox.log</default> <errors>./build/docblox.errors.log</errors> </paths> </logging> <transformations> <template name="zend" /> </transformations> <files> <directory>./src</directory> <ignore>library/Zend/*</ignore> </files> </docblox>
Ant用ビルドファイル
<?xml version="1.0" encoding="UTF-8"?> <project name="pofc" default="all"> <condition property="script-suffix" value=".bat" else=""> <os family="windows" /> </condition> <condition property="dev_null" value="nul" else="/dev/null"> <os family="windows" /> </condition> <property name="outputDir" value="."/> <property name="src" value="${basedir}/src" /> <property name="tests" value="${basedir}/tests" /> <property name="ignore" value="${src}/library/Zend/*" /> <target name="all" depends="phploc,phpcb"/> <target name="phploc" description="Measure project size using PHPLOC"> <exec executable="phploc${script-suffix}"> <arg line="--log-csv ${basedir}/build/logs/phploc.csv --exclude ${ignore} --suffixes php ${src}" /> </exec> </target> <target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser"> <exec executable="phpcb${script-suffix}"> <arg line="--log=${basedir}/build/logs --source=${src} --output=${basedir}/build/code-browser --ignore=${ignore}" /> </exec> </target> </project>
アプリケーションのbootstrapはこんな感じにした。
もちろんユニットテスト実行にも使える。
<?php function bootstrap() { // not written directly any longer. define('HOME_PATH', realpath(dirname(dirname(__FILE__)))); // define application environment define('APPLICATION_ENV', (file_exists(realpath(HOME_PATH . '/development')) ? 'development' : 'production')); // application base path define('APPS_PATH', realpath(HOME_PATH . '/apps')); // application config files path define('CONFIGS_PATH', realpath(APPS_PATH . '/configs')); // timezone setting is required. date_default_timezone_set('Asia/Tokyo'); // ensure encoding is UTF-8 mb_internal_encoding('UTF-8'); // ensure library is on include_path. set_include_path(realpath(APPS_PATH . '/library') . PATH_SEPARATOR . get_include_path()); // set custom error handler. require_once 'My/Errorhandler.php'; set_error_handler(array('My\Errorhandler', 'handleError')); // set class autoloader. require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace(array('My\\', 'Twig_')); } // keep clean other symbol tables. bootstrap();