Artikelformat

Continuous Integration – Teil 2 (phpUnderControl)

In Teil 1 haben wir gesehen, was der Sinn von Continuous Integration ist, welche Komponenten ein Server bereitstellen muss und wie die Theorie hinter dem Namen aussieht. Beispielhaft betrachten wir phpUnderControl. Im Teil 3 werde ich den Hudson CI Server vorstellen, sodass man einen Vergleich wagen kann.

Als Basissystem wurde Debian Squeeze genutzt. Auf anderen Systemen wird die Installation ähnlich verlaufen.

phpUnderControl nutzt als Basis CruiseControl, was ein Java-CI-Server ist. Dieser wurde natürlich in Java entwickelt und setzt somit ein JRE voraus. Bei dem Test wurde Java6 von Sun genutzt.

CruiseControl wurde in der aktuellen Version heruntergeladen und im /opt Verzeichnis entpackt. In meinem Fall findet man nun den cruisecontrol-2.8.3 Ordner. Um ein späteres Upgrade zu ermöglichen wird ein symbolischer Link angelegt, der cruisecontrol heißt.

1
ln -sf cruisecontrol-bin-2.8.3/ cruisecontrol

Nun kann man CruiseControl schon starten. Als nächstes installiert man phpUnderControl. Am einfachsten erledigt man dies über PEAR. Dadurch werden auch gleich die Abhängigkeiten aufgelöst.

1
2
3
pear channel-discover components.ez.no
pear channel-discover pear.phpundercontrol.org 
pear install --alldeps phpuc/phpUnderControl-beta

Bei Squeeze wird man bei der Installation einige Fehler sehen. Diese kommen daher, dass Debian das Verzeichnis /usr/share/doc symbolisch verlinkt. Die einfachste Lösung ist den Link zu löschen und den letzten der obengenannten Schritte wiederholt durchzuführen. Nun funktioniert die Installation auch einwandfrei.

CruiseControl wird als nächstes gepatcht. Dies erledigt man über einen kurzen Befehl.

1
phpuc install /opt/cruisecontrol

Wenn man möchte kann man jetzt noch ein Beispiel-Projekt an legen:

1
phpuc example /opt/cruisecontrol

Wenn hierbei Probleme auftreten kann es sein, dass der PHP_CodeBrowser nicht installiert ist. Dieser wird benötigt, um den Sourcecode auf dem CI-Server in einer sehr hübschen Art und Weise durchzusehen. Das phpcb genannte Tool kann man über pear nachinstallieren. Aktuell ist es noch im Alpha-Status, daher ist die Versionsnummer notwendig und ist später vielleicht anders – also bitte bei Bedarf anpassen:

1
pear install --alldeps phpunit/PHP_CodeBrowser-0.1.1

Bevor man CruiseControl startet sollte man noch ant installieren.

1
apt-get install ant

Nun kann CruiseControl gestartet werden und man kann sich anschauen, was die Ausgabe so bietet.

1
/opt/cruisecontrol/cruisecontrol.sh

Die Url lautet dann ip:8080/cruisecontrol/ man muss evtl. etwas warten, da der Startup-Vorgang einen Moment dauert. Auf der Startseite findet man das Beispiel-Projekt „php-under-control“ und kann sich hier die einzelnen Tabs anschauen. Vorhanden sind hier Overview, Tests, Metrics, Coverage, Code Browser, Documentation, CodeSniffer, PHPUnit PMD. Die meisten Tabs sind selbsterklärend. Spannend ist der Codebrowser, der den Sourcecode in einer schöner Darstellung aufbereitet.

Im nächsten Schritt fügt man ein eigenes Projekt in CC und phpUnderControl ein. Hierfür biete ich keine ausführliche Beschreibung, da man dies in der phpUnderControl Dokumentation nachlesen kann. Die Beschreibung geht auf die einzelnen Aspekte ein.

Ich persönlich finde die vielen manuellen Schritte eher abschreckend und umständlich. Daher gibt es im nächsten Teil eine Alternative zu phpUnderControl, die mE übersichtlicher zu konfigurieren ist.

3 Kommentare

  1. So, dank Deiner Anleitung habe ich es geschafft und phpuc auf meinem Server installiert. Die Testpage wird erfolgreich aufgerufen und das Testprojekt angezeigt. Super, vielen Dank für die Anleitung. Schätzungsweise hätte die Installation ohne die Anleitung sehr viel länger benötigt. Hatte noch einige Probleme mit den entsprechenden Abhängigkeiten, dass konnte ich jedoch schnell lösen: Java muss installiert sein, hab vorläufig das Runtime installiert. Das jdk kann ich ja bei bedarf nachinstallieren.

    Jetzt kann ich anfangen, mein erstes grösseres Projekt in CruiseControll einzubinden. Vor allem muss ich mein SVN-Verzeichnis auf dem Server irgendwie einbinden. Wird spannend 🙂 Werde wohl einige Zeit mit der Config von phpuc beschäftigt sein.

    Continuous Integration wird mir meine Arbeit jedenfalls erleichtern, besser als jedes Script einzeln aufzurufen. Das switchen zwischen den einzelnen Builds ist nett, muss mir das mal genauer ansehen. Danke!

    Antworten
    • Das JRE braucht man bei allen Java CI Servern – JDK ist da nicht notwendig, wenn man nicht selbst kompilieren möchte. Wie du ein eigenes Projekt in phpUnderControl hängst findest du in der phpuc Doku. Viel Erfolg

  2. So, mein Erfolg hat sich eingestellt 🙂 Hat etwas länger gebraucht, das lag aber nur daran dass svn Probleme bei der integration gemacht hat. Laut einer Issue ist der Fehler des Clienten in der neuesten Version behoben. Also musste ich mangels Binaries für Debian Lenny Subversion mit SSL-Unterstützung neu kompilieren.

    Jetzt funktioniert phpuc aber einwandfrei: Nur bei Änderungen im Repository wird ein neuer Build nach etwa einer Minute angestossen (So wie ich es gewünscht habe).

    CodeSniffer, Unit-Tests, CodeBrowser, Code-Coverage, PHPDoc, Mess Detector, pDepend und die Metriken werden mit jedem Build neu erstellt. Bin froh, das mein System jetzt einwandrei läuft und so auch weiter laufen wird. Hatte ja geahnt dass alleine die Integration viel Zeit in Anspruch nimmt, aber die zahlst sich mit den nächsten Builds schon aus.

    Vor allem: Ich hab mich in die Config eingearbeitet. Auf den ersten Blick sieht die Config von CruiseControl abschreckender aus, als es wirklich ist. So schwer wars dann doch nicht 🙂

    Antworten

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.