© saicle/Shutterstock.com
Installation und Betrieb eines Jenkins-Servers

Softwarequalität in PHP-Prozessen


Das PHP-Umfeld beschreitet zum Glück vieler Entwickler einen immer professionelleren Weg, was die Softwarequalität betrifft. In den letzten Monaten und Jahren haben sich viele Tools zur Qualitätssicherung etabliert. Diese Tools entfalten ihre Wirkung am besten in einem definierten Prozess, vorzugsweise in einem Continuous-Integra­tion-System. In dieser Reihe wollen wir ein solches System aufsetzten und betreiben.

Um Softwarequalität im Projekt zu gewährleisten, sind Continuous-Integration-Systeme auch in der PHP-Welt zu einem wichtigen Standard geworden. Ein solches System ist am wenigsten anfällig für Fehler, wenn es automatisiert arbeitet und nicht darauf angewiesen ist, dass Teammitglieder diesen Prozess anstoßen. Automatismen verhindern, dass es vergessen wird, oder auch aus Zeitmangel oder Zeitdruck übersprungen wird. Dann werden aus einer Ausnahme schnell zwei, dann drei und mehr, mit der Zeit verliert das Team den Prozess vollkommen aus den Augen und die Gefahr steigt, dass die Qualität leidet. Diese Artikelserie versteht sich als Schritt-für-Schritt-Anleitung, ein CI-System aufzusetzen. Der Leser sollte mit Versionsmanagementsystemen wie z. B. Git oder SVN vertraut sein, auch Grundlagen in Linux sind nicht abträglich.

Apache Ant

Bevor wir starten, will ich eine kurze Einführung in Ant geben. Wer aus dem C/C++-Umfeld kommt, kennt sicher das Build-Werkzeug GNU Make. Ant ist ein ähnliches Werkzeug, mit dem sich Build-Prozesse steuern und automatisieren lassen. Weitere bekannte Werkzeuge, die auch eingesetzt werden könnten, sind Apache Maven und Phing. Wir werden in den folgenden Beispielen Apache Ant verwenden, was keine Wertung darstellen soll, lediglich eine Empfehlung. Maven und Phing eignen sich in gleichem Maße.

Wird der Befehl ant in der Konsole aufgerufen, sucht das Programm standardmäßig eine build.xml. Diese Datei könnte aussehen wie in Listing 1; zu Beginn eine sehr abgespeckte Version, um die Grundfunktionen zu erläutern.

Listing 1: Einfaches Ant-Skript

<?xml version="1.0" encoding="UTF-8"?> <project name="First Build" default="build"> <target name="build" depends="prepare"/> <target name="prepare " depends="clean"> <mkdir dir="${basedir}/build/api"/> <mkdir dir="${basedir}/build/coverage"/> </target> <target name="clean"> <rm dir ="${basedir}/build/"/> </target> </project>

Wird ant ohne weitere Parameter aufgerufen, wird das target-Tag aufgerufen, in welchem der Attributname den Wert build hat, so entsprechend konfiguriert (Listing 1, Zeile 2). In diesem Tag können weitere Targets definiert sein, welche abgearbeitet werden sollen. Zum Beispiel: Soll vor dem eigentlichen Build-Prozess ein Clean(-up) durchgeführt werden, wird im Tag Target build zusätzlich das Attribut depends mit dem Wert clean gesetzt. Vor dem Ausführen von build wird nun zuerst das clean-Target ausgeführt. Weiterhin besteht auch die Möglichkeit, nur einen Clean(-up) zu starten, indem ant clean gestartet wird. Mit der Ant-Umgebung lassen sich so komplexe Build-Vorgänge abbilden. Schlägt z. B. im Build-Prozess der Unit Test fehl, kann das Ant-Build-Skript so konfiguriert werden, dass der Build-Prozess an dieser Stelle gestoppt wird. Mehr dazu später.

Jenkins

Es gibt am Markt mehrere CI-System, u. a. Hudson, Jenkins und einige mehr. In diesem Artikel werden wir uns auf Jenkins konzentrieren und einen CI-Server damit aufsetzen.

Jenkins ist ein webbasiertes System, welches zu großen Teilen von einem Mitarbeiter von Sun Microsystems entwickelt wurde. Genau genommen entwickelte dieser Mitarbeiter Hudson – er verließ jedoch Sun Microsystems, nachdem es von Oracle übernommen wurde. Oracle entwickelte Hudson unabhängig weiter, hält ebenso die Namensrechte daran. Aus diesem Grund entschied man sich, unabhängig einen Fork von Hudson weiterzuentwickeln. Jenkins war geboren.

Jenkins ist komplett in Java geschrieben und läuft in nahezu jedem beliebigen Servlet-Container. Hierzu kann der mitgelieferte Servlet-Container Winstone verwendet werden, alternativ natürlich auch Tomcat oder vergleichbare Container. Um mit Jenkins den Build-Prozess zu automatisieren, empfiehlt es sich, Build-Tools einzusetzen. Jenkins unterstützt z. B. Apache Ant und Maven. Darüber hinaus werden Versionsmanagementsysteme wie CVS, SVN und Git bedient. Auch...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang