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
  1. Ein CruiseControl Projekt mit phpuc anlegen
  2. Die build.xml
  3. SimpleTests
  4. Weitere Tools für den Einsatz mit Drupal
  5. 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>

Aktualisiert: