Возникли проблемы со ссылкой на каталог с Jenkins & Phing

Я настроил свою первую среду CI с Jenkins и Phing, и в основном она работает отлично, хотя у меня есть несколько сбоев, которые я не могу решить. У меня постоянно возникают проблемы с определением того, как ссылаться на каталоги в различных частях моего процесса сборки, ценю любые мысли по поводу ниже:

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 в стандартный вывод и сообщает об этом в журналах 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

person Jordan Windebank    schedule 26.12.2013    source источник
comment
Я решил проблему 1, переписав, чтобы использовать только значения аргументов, а не путь аргумента. Тем не менее, по-прежнему не удается разрешить исключения путей для phpDox.   -  person Jordan Windebank    schedule 27.12.2013


Ответы (1)


Обе проблемы решены.

Проблема 1: задача 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>
person Jordan Windebank    schedule 28.12.2013