Artikelformat

PHPlint im Hudson integrieren

Heute gibt es wieder einmal leichte Kost. Ihr dürft euch dafür bei PECL bedanken. Mir war es bisher unmöglich SPL_Types zu installieren, ich habe aber noch nicht aufgegeben, denn ich denke, das ist ein spannendes Thema. Aber zurück zum eigentlichen Thema. PHPlint im Hudson. Wir haben ja bereits gesehen wie man PHP mit dem Hudson verheiratet und sloccount kann man auch damit verbinden und nun kommt ein relativ nahe liegender Gedanke: Warum prüft man den PHP Code nicht auf korrekte Syntax, wenn man den Quelltext schon nicht kompilieren kann?

Und genau das machen wir nun. Dazu kann man sich den PHP-Interpreter schnappen und die Syntaxcheck-Möglichkeit benutzen. Dazu ruft man einfach folgenden Code in einer Kommandozeile auf. Dieses Beispiel ist mal wieder Unix/Linux spezifisch, die Windows User werden es aber mit Sicherheit anpassen können:

1
php -l file.php

Als Ausgabe erhält man entweder No syntax errors detected in file.php oder eine Ausgabe die den Fehler beschreibt. Diese Funktion nutzen wir nun im Hudson und bauen uns dafür ein neues Target das treffenderweise phplint heißt.

1
2
3
4
5
6
7
8
9
10
11
<target name="phplint" depends="prepare">
<apply executable   = "php"
       failonerror  = "true"
       error        = "checkphp.err.txt">
            <arg value="-l" />
            <fileset dir="${base}/svn">
                <include name="**/*.php" />
                <include name="**/*.inc" />
            </fileset>
        </apply>
    </target>

Dieses Fragment baut man in die build-Datei ein und ergänzt die Targets im Hudson um das phplint-Target. Sinnvollerweise direkt nach dem prepare, denn wenn der Code schon nicht syntaktisch korrekt ist, bricht der Build an dieser Stelle ab.

Der Check ist relativ schnell umgesetzt und bringt sicher einen weitaus höheren Mehrwert. Als Alternative sei erwähnt, dass man einen solchen Check auch im SVN als pre-commit Hook hinterlegen könnte. Dann könnte man syntaktisch inkorrekten Code nicht einmal im SVN unterbringen. Diese Information nur am Rande.

4 Kommentare

  1. Ich beschäftige mich momentan auch mit CI, kann mich aber noch nicht richtig für eine Lösung entscheiden.

    Was kannst Du empfehlen? Hudson oder PHPUnderControl? Warum? Gibt es andere gute Lösungen?
    (Habe mal PHPUnderControl installiert, aber irgendwie war dies eine ziemlich Tortur -> Windows Installation)

    Antworten
    • Ich persönlich nutze den Hudson. Ich habe sowohl phpUnderControl als auch den Hudson ausprobiert und der Hudson CI war leichter zu konfigurieren. Neue Plugins lassen sich mit 2 Klicks hinzufügen und über Updates wird man in der Admin-Ansicht auch informiert. Weiter wird der gesamte CI Server über ein Webinterface administriert und den Weg zur Konsole muss man nur in Notfällen wagen. Ein CI System sollte mE gewisse langweilige Arbeiten dem Entwickler abnehmen und nicht eine neue Komplexität schaffen. Ich habe beide System bisher nur unter Linux installiert, daher kann ich dir keine Infos geben, was unter Windows besser ist. Alle Kollegen und Bekannten, die mit einem CI-Server arbeiten, nutzen Hudson. Einige für PHP einige für JAVA. Schön ist hier auch, dass sich verschiedene Programmiersprachen unter einer Oberfläche verwalten und darstellen lassen.
      Ich kenne noch Xinc. Der ist in PHP geschrieben, aber das letzte Release ist vom Mai 2008. Es hatte mich abgeschreckt, dass sich solange nichts getan hat.

      Da du die phpTools (pdepend, CodeSniffer etc) vom phpUnderControl her ja bereits installiert hast, kannst du den Hudson ja sehr leicht ausprobieren. Du kannst sogar das Buildfile vom phpuc nutzen und etwas modifiziert beim Hudson einsetzen.

  2. Ich kann Hudson aus dem Java Umfeld auch sehr empfehlen, finde es aber schade, dass man extra noch einen Java-fähigen Server braucht und in einer PHP Umgebung kein gutes PHP CI Tool existiert.
    Das schreckt sicher (zurecht) viele PHP Freunde ab.

    Derzeit sehe ich daher zu Hudson wenig Alternativen, aber einige PHP CI Lösungen sind ja bereits in Aussicht (siehe Projekt von Symphony, Xinc, …) aber leider noch kein annehmbares Resultat.

    Antworten
    • Wenn man nur in einer PHP-Umgebung arbeitet stimmt das auf jeden Fall. Sobald aber mehrere Programmiersprachen unterstützt werden sollen, muss man sich auf ein CI System einigen, wenn man alle Projekte im Überblick haben möchte. Hudson hat da einen extrem umfangreichen Plugin-Support. Selbst .NET ist kein Problem – wenn man mit einem Windows Server als Grundlage arbeitet.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.