In diesem Artikel werde ich aufzeigen, wie man ein Drupal Projekt in einen Continuous Integration Prozess einbindet mit der Verwendung von CruiseControl/phpUnderControl.
Was haben wir von einen Vorteil durch den Einsatz der CI Umgebung?
- einen vollautomatischen Build-Prozess
- API Dokumentation wird erstellt
- Quelltest Analysen werden erstellt
- Tests (phpUnit, SimpleTest) werden automatisiert durchgeführt
- Benachrichtigungssystem, falls etwas nicht glatt läuft
- Ein CruiseControl Projekt mit phpuc anlegen
- Die build.xml
- SimpleTests
- Weitere Tools für den Einsatz mit Drupal
- Benachrichtigungen / Hinweise
1. Ein CruiseControl Projekt mit phpuc anlegen
Am einfachsten und schnellsten legt man ein neues Projekt mit phpuc an. Hier die komplette Referenz, die alle Befehle aufzeigt, welche zum Anlegen eines Projektes verfügbar sind:
# phpuc project --help
Command line options and arguments for "project"
-g --coding-guideline The used PHP_CodeSniffer coding guideline.
-d --destination A destination directory for the source code
checkout. Default is "source".
-r --ignore-dir List of ignorable directories, separated by
comma.
-m --module A CVS project module.
-p --password Optional password for the version control
system.
-e --pear-executables-dir The pear directory with cli scripts.
-j --project-name The name of the generated project.
-i --schedule-interval Schedule interval.
-s --source-dir The source directory in the project.
-a --test-case Name of the test case class.
-t --test-dir The test directory in the project.
-l --test-file Name of the test case file.
-u --username Optional username for the version control
system.
-v --version-control The used version control system.
-x --version-control-url The version control system project url.
-b --without-code-browser Disable PHP CodeBrowser support.
-f --without-code-sniffer Disable PHP CodeSniffer support.
-z --without-ezc-graph Disable ezcGraph support.
-c --without-php-documentor Disable phpDocumentor support.
-n --without-phpunit Disable PHPUnit support.
<cc-install-dir> The installation directory of CruiseControl.
Hier ein Beispiel für ein neues Projekt:
$ phpuc project \
--version-control svn \
--username "svnbenutzer" \
--password "svnkennwort" \
--version-control-url svn://svn.domain.com/repository/drupal6/trunk \
--test-case MyProjectTestSuite \
--test-dir "/opt/cruisecontrol/projects/drupal6/source/unit_tests" \
--test-file "MyProjectTestSuite.php" \
--project-name Drupal6 /opt/cc
Mit diesen Aufruf wird die Datei project/Drupal6/build.xml erzeugt, die dann für weitere Anpassungen mit dem Editor bearbeitet werden kann. Der Inhalt der build.xml sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Drupal6" default="build" basedir=".">
<target name="build" depends="checkout,php-documentor,php-codesniffer,phpunit"/>
<target name="checkout">
<exec executable="svn" dir="${basedir}/source" failonerror="on">
<arg line="up"/>
</exec>
</target>
<target name="php-documentor">
<exec executable="phpdoc" dir="${basedir}/source" logerror="on">
<arg line="--title '${ant.project.name}' -ue on -t ${basedir}/build/api -d src -tb '/usr/share/php/data/phpUnderControl/data/phpdoc' -o HTML:Phpuc:phpuc"/>
</exec>
</target>
<target name="php-codesniffer">
<exec executable="phpcs" dir="${basedir}/source" output="${basedir}/build/logs/checkstyle.xml" error="/tmp/checkstyle.error.log">
<arg line="--report=checkstyle --standard=PEAR src"/>
</exec>
</target>
<target name="phpunit">
<exec executable="phpunit" dir="${basedir}/source" failonerror="on">
<arg line=" --log-junit ${basedir}/build/logs/phpunit.xml --coverage-clover ${basedir}/build/logs/phpunit.coverage.xml --coverage-html ${basedir}/build/coverage MyProjectTestSuite /opt/cruisecontrol/projects/drupal6/source/unit_tests/MyProjectTestSuite.php"/>
</exec>
</target>
</project>