Короткий ответ: крайне сложно настроить файл сборки в Windows таким образом, чтобы не нарушить ни выполнение, ни результаты, так или иначе. Это не проблема Дженкинса и не проблема муравья. Это инструменты QA. Если у вас есть шанс переместить Дженкинса в * nix, сделайте это.
В частности, при запуске PHP QA Tools обязательно вызывайте их с помощью cmd /c
, например,
<target name="pdepend">
<exec executable="cmd">
<arg line="/c pdepend
--jdepend-xml='${basedir}/build/logs/jdepend.xml'
… additional options
sourcefolder1,sourcefolder2
" />
</exec>
</target>
Также убедитесь, что у вас нет пробелов в любых путях, потому что они приведут к проблемам. Вы также не можете надежно использовать символ ~
(как в путях DOS), и каждый из инструментов PHP будет иметь свои собственные представления о разделителе каталогов и о том, принимают ли они несколько исходных папок в качестве значений, разделенных запятыми, и т. Д.
Не стесняйтесь сообщать о любых ошибках, с которыми вы сталкиваетесь, у различных владельцев инструментов на GitHub, поэтому они исправляются. Также подумайте о том, чтобы зайти в # jenkins-php на Freenode IRC .
Найдите пример конфигурации файла сборки, который работал для меня :
<?xml version="1.0" encoding="utf-8" ?>
<project name="foo" default="build" basedir=".">
<target name="clean">
<!-- Clean up -->
<delete dir="${basedir}/build" />
<!-- Create build directories -->
<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>
<!-- Run unit tests and generate junit.xml and clover.xml -->
<target name="phpunit">
<exec executable="cmd">
<arg line="/c phpunit '${basedir}/test'" />
</exec>
</target>
<!-- Run the pdepend, phpmd, phpcpd, phpcs, phpdoc and phploc tasks in parallel
using a maximum of 2 threads. -->
<target name="parallelTasks">
<parallel threadCount="1">
<sequential>
<antcall target="pdepend" />
<antcall target="phpmd" />
</sequential>
<antcall target="phpcpd" />
<antcall target="phpcs" />
<antcall target="phpdoc" />
<antcall target="phploc" />
</parallel>
</target>
<!-- Generate jdepend.xml and software metrics charts -->
<target name="pdepend">
<exec executable="cmd">
<arg line="/c pdepend
--jdepend-xml='${basedir}/build/logs/jdepend.xml'
--jdepend-chart='${basedir}/build/pdepend/dependencies.svg'
--summary-xml='${basedir}/build/logs/jdepend-summary.xml'
--overview-pyramid='${basedir}/build/pdepend/overview-pyramid.svg'
--ignore='${basedir}\lib\Zend\*'
application,lib
" />
</exec>
</target>
<!-- Generate pmd.xml -->
<target name="phpmd">
<exec executable="cmd">
<arg line="/c phpmd application,lib
xml
codesize,design,naming,unusedcode
--reportfile '${basedir}/build/logs/pmd.xml'
--exclude '${basedir}\lib\Zend\*'
" />
</exec>
</target>
<!-- Generate pmd-cpd.xml -->
<target name="phpcpd">
<exec executable="cmd">
<arg line="/c phpcpd
--log-pmd '${basedir}/build/logs/pmd-cpd.xml'
--exclude '${basedir}/lib/Zend'
application lib" />
</exec>
</target>
<!-- Generate phploc.csv -->
<target name="phploc">
<exec executable="cmd">
<arg line="/c phploc
--log-csv '${basedir}/build/logs/phploc.csv'
--exclude '${basedir}/lib/Zend'
application lib" />
</exec>
</target>
<!-- Generate checkstyle.xml -->
<target name="phpcs">
<exec executable="cmd">
<arg line="/c phpcs
--report=checkstyle
--report-file='${basedir}/build/logs/checkstyle.xml'
--standard='${basedir}/docs/coding-standard/ruleset.xml'
--ignore=*\\lib\\Zend\\*
-p
application lib" />
</exec>
</target>
<!-- Generate API documentation -->
<target name="phpdoc">
<exec executable="cmd">
<arg line="/c phpdoc
--directory application lib
--target '${basedir}/build/api'
--ignore '${basedir}/lib/Zend/*'
" />
</exec>
</target>
<target name="phpcb">
<exec executable="cmd">
<arg line="/c phpcb
--log '${basedir}/build/logs'
--output '${basedir}/build/code-browser'
--ignore '${basedir}/lib/Zend'
" />
</exec>
</target>
<target name="build" depends="clean,parallelTasks,phpunit,phpcb" />
</project>