1

Jenkins と Phing を使用して最初の CI 環境をセットアップしましたが、ほとんど問題なく動作していますが、解決できない問題がいくつかあります。ビルドプロセスのさまざまな部分でディレクトリを参照する方法を決定するのに常に問題があります。以下について考えていただければ幸いです。

build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="myProject" default="dev" basedir=".">

    <property name="baseDir" value="." />
    <property name="resourceDir" value="${baseDir}/resources" />
    <property name="srcDir" value="${baseDir}/src" />
    <property name="outputDir" value="${baseDir}/build" />
    <property name="logDir" value="${baseDir}/build/logs" />
    <property name="phpmdRulesets" value="${resourceDir}/phpmd/rulesets" />

    <property name="devServer" value="C:\Apache24\htdocs\myProject.com" />

    <target name="init">
        <mkdir dir="${outputDir}" />
        <mkdir dir="${logDir}" />
    </target>

    <target name="clean">
        <delete dir="${devServer}" includeemptydirs="true" verbose="true" failonerror="true" />
        <mkdir dir="${devServer}" />
    </target>

    <target name="test">
        <echo msg="Running unit tests" />
        <exec executable="phpunit" checkreturn="true">
            <arg value="--log-junit=${logDir}/PHPUnit.xml" />
            <arg value="--verbose" />
            <arg value="--debug" />
            <arg value="--coverage-clover=${logDir}/clover.xml" />
            <arg path="${baseDir}" />
        </exec>
    </target>

    <target name="build" depends="phpcs, phpmd, phpcpd, phpDox">
        <echo msg="Running build" />
        <echo msg="Copying files to build directory..." />
        <copy todir="${outputDir}">
            <fileset dir="${baseDir}">
                <include name="**/src/**" />
                <include name="**/resources/**" />
            </fileset>
        </copy>
    </target>

    <target name="phpcs">
        <echo msg="Running phpcs" />
        <exec executable="phpcs"> 
            <arg value="--report=checkstyle" />
            <arg value="--ignore=${srcDir}/php/Test/*,${srcDir}/php/lib/*" />
            <arg value="--report-file=${logDir}/checkstyle.xml" />
            <arg path="${srcDir}" />
        </exec>
    </target>

    <target name="phpmd">
        <echo msg="Running phpmd" />
        <exec executable="phpmd">
            <arg path="${srcDir}" />
            <arg value="xml" />
            <arg value="${phpmdRulesets}/codesize.xml,${phpmdRulesets}/unusedcode.xml,${phpmdRulesets}/naming.xml,${phpmdRulesets}/design.xml" />
            <arg value="--reportfile ${logDir}/messdetector.xml" />
            <arg value="--exclude ${srcDir}/php/Test/,${srcDir}/php/lib/" />
        </exec>
    </target>

    <target name="phpcpd">
        <echo msg="Running phpcpd" />
        <exec executable="phpcpd">
            <arg value="--log-pmd=${logDir}/phpcpd.xml" />
            <arg value="-vvv" />
            <arg value="--exclude=${srcDir}/php/Test/,${srcDir}/php/lib/" />
            <arg path="${srcDir}" />
        </exec>
    </target>

    <target name="phpDox">
        <echo msg="Running phpDox" />
        <exec executable="phpdox">
            <arg value="${resourceDir}" />
        </exec>
    </target>

    <target name="dev" depends="init, clean, test, build">
        <echo msg="Running dev target" />
        <copy file="${outputDir}/src/php/index.php" tofile="${devServer}/index.php" />
        <copy todir="${devServer}/php">
            <fileset dir="${outputDir}/src/php">
                <include name="**" />
                <exclude name="**/index.php" />
            </fileset>
        </copy>
        <copy todir="${devServer}/api">
            <fileset dir="${outputDir}/api/html">
                <include name="**" />
            </fileset>
        </copy>
        <copy file="${outputDir}/src/php/lib/phpLogin/index.php" tofile="${devServer}/php/lib/phpLogin/index.php" />
    </target>
</project>

問題 1: phpmd はレポート ファイルを出力しませんが、Jenkins ログにエラーは報告されていません。代わりに、xml 全体を stdout に記録し、Jenkins ログに報告します。

myProject > phpmd:

     [echo] Running phpmd
Property ${srcDir} => ./src
Property ${phpmdRulesets} => ./resources/phpmd/rulesets
Property ${phpmdRulesets} => ./resources/phpmd/rulesets
Property ${phpmdRulesets} => ./resources/phpmd/rulesets
Property ${phpmdRulesets} => ./resources/phpmd/rulesets
Property ${logDir} => ./build/logs
Property ${srcDir} => ./src
Property ${srcDir} => ./src
     [exec] Executing command: phpmd ./src xml ./resources/phpmd/rulesets/codesize.xml,./resources/phpmd/rulesets/unusedcode.xml,./resources/phpmd/rulesets/naming.xml,./resources/phpmd/rulesets/design.xml "--reportfile ./build/logs/messdetector.xml" "--exclude ./src/php/Test/,./src/php/lib/" 2>&1
     [exec] <?xml version="1.0" encoding="UTF-8" ?>
     ...

問題 2: phpDox でソース コード内の特定のディレクトリを除外することができません。以下は私のphpdox.xmlです。

<?xml version="1.0" encoding="utf-8" ?>
<phpdox xmlns="http://phpdox.de/config">
    <project name="myProject.com" source="src/php" workdir="build/api/xml">
        <collector backend="parser" publiconly="false">
            <include mask="*.php" />
            <exclude mask="/lib/**" />
        </collector>
        <generator output="build/api">
            <build engine="html" output="html"/>
        </generator>
    </project>
</phpdox>

私が使用できる正しい除外マスクを知っている人はいますか? 私のファイル構造は次のとおりです。

myProject.com
  /build.xml
  /phpdox.xml
  /src
    /php
      /lib
4

1 に答える 1

1

両方の問題が解決しました。

問題 1: arg pathではなくarg 値のみを使用するように phpmd タスクを変更しました。以下に修正:

<target name="phpmd">
    <echo msg="Running phpmd" />
    <exec executable="phpmd">
        <arg value="${dir.src}" />
        <arg value="xml" />
        <arg value="${dir.phpmdRulesets}/codesize.xml,${dir.phpmdRulesets}/unusedcode.xml,${dir.phpmdRulesets}/naming.xml,${dir.phpmdRulesets}/design.xml" />
        <arg value="--reportfile" />
        <arg value="${dir.logs}/messdetector.xml" />
        <arg value="--exclude"/>
        <arg value="test,lib" />
    </exec>
</target>

問題 2:除外マスクが機能するようになりました。以下の xml を修正しました。

<?xml version="1.0" encoding="utf-8" ?>
<phpdox xmlns="http://phpdox.de/config">
    <project name="myProject.com" source="src/app" workdir="build/api/xml">
        <collector backend="parser" publiconly="false">
            <include mask="*.php" />
            <exclude mask="**/*lib*" />
            <exclude mask="**/*test*" />
        </collector>
        <generator output="build/api">
            <build engine="html" output="html"/>
        </generator>
    </project>
</phpdox>
于 2013-12-28T05:02:40.567 に答える