© saicle/Shutterstock.com
Datenbank-Deployment und -Versionierung mit Phing und Liquibase

DB V 1.x


Softwareprojekte werden sorgfältig von Entwicklern versioniert. Die Datenbank bleibt dabei oft auf der Strecke. Sie wird in der Regel manuell deployt und es wird nicht ernst genommen, dass die Fehlerquote bei manueller Integration höher sein kann. Software­qualität hört jedoch bei der Datenbank nicht auf. Sinnvoll ist es, mindestens einen Schritt weiterzudenken. Phing bietet einerseits ein starkes Tool für Automatismen und andererseits eine solide Basis für das Datenbank-Deployment. Im Zusammenspiel mit Liquibase ist es ein starker Helfer im Alltag.

Wer sich die Aufgabe stellt, Prozesse und wiederkehrende Arbeitsschritte zu automatisieren, kommt an Build-Tools wie Apache Ant [1] oder Phing [2] nicht vorbei. Die Entscheidung, welches der beiden Tools verwendet wird, sollte jeder Entwickler selbst treffen. Ant ist ein reines Java-Build-Tool. Es wird jedoch auch in der Welt von PHP und Webprojekten gern eingesetzt. Phing ist ein PHP-Projekt-Build-System, dessen Idee und Konzept auf Apache Ant basiert. Für mich ist Phing die erste Wahl, da es mir als PHP-Entwickler ermöglicht, es meinen eigenen Anforderungen anzupassen oder weiterzuentwickeln. In den folgenden Beispielen konzentriere ich mich daher nur auf Phing.

Phing

Die Installation von Phing wird über den eigenen PEAR-Channel [3] realisiert. Dazu wird der Phing-Channel in PEAR registriert und die Installation ausgelöst:

$ pear channel-discover pear.phing.info $ pear install [--alldeps] phing/phing

Windows-Benutzer sollten beachten, dass die Verwendung von --alldeps möglicherweise PECL-Erweiterungen wie XDebug [4] installiert, und das kann laut Dokumentation [5] auf Windows-Systemen unter Umständen zu Problemen führen.

Phing wird über eine XML-Datei, das so genannte „Build-File“, konfiguriert. Im Build-File können Variablen, Befehle, Abläufe, und Abhängigkeiten definiert werden. Im Beispiel in Listing 1 ist eine Hello-World-Konfiguration dargestellt. Der Knoten project definiert den Namen des Projekts sowie den Namen des Target-Knotens, der standardmäßig ausgeführt werden soll. Ein Target definiert bzw. gruppiert verschiedene zusammenhängende Aufgaben (Tasks). Ein Target kann in Abhängigkeit eines anderen Targets stehen, der dann im Vorfeld ausgeführt wird. Im Beispiel „Hello World“ verlangt das Target world das in Abhängigkeit stehende Target hello. Im Hintergrund wird in Phing zuerst hello gefolgt von world ausgeführt, was – abstrakt gesehen – die Ausgabe „Hello World“ zur Folge hat. Das vollständige Pr...

Neugierig geworden?

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