am 11. Mai 2010
Heute geht der Dank an Daniel Fahlke, er hat sich die Mühe gemacht einen Artikel über seine Erfahrungen mit Continuous Integration zu schreiben. Es ist sein erster Artikel bei uns, seid also nett. Ja dann würde ich mal sagen Bühne frei für Daniel.
Nun, ihr kennt das bestimmt. Ich und ein Kumpel wollten gemeinsam ein PHP Projekt beginnen. Da wir es damit jedoch nicht so eilig haben, beschlossen wir die Gelegenheit zu nutzen, dies zu einem Musterprojekt für uns zu gestalten, in dem wir alles anwenden, was zu einem vorbildlich geführtem PHP Projekt gehört. Die Verwendung von SVN ergab sich praktisch von selbst. Auch die Verwendung von Unit Tests war klar.
Aber nun fingen wir an zu grübeln. Nicht nur, dass wir die Auswertung von den Unit Tests gerne Zentral hätten, wir mögen es auch, dass die Ergebnisse und Statistiken in ansehnlicher weise aufbereitet werden. Wir kamen zu dem Schluss, dass wir eine continuous integration Umgebung brauchten.
Erst mal dazu, was eine continuous integration Umgebung bzw continuous integration selbst ist und was es beschreibt. Als Hilfe gebe ich mal die deutsche Übersetzung “Kontinuierliche Integration” dazu. Wobei, gehen wir doch mal etwas zurück, bevor die Kontinuierliche Integration genutzt wurde. Da lief es folgendermaßen ab. Wenn eine Software weiter entwickelt wurde, dann arbeitete man bis zum nächsten Release und schaute dann, wie man die Software auf der Zielplattform zum laufen bekommt und versucht alle Fehler zu beseitigen. Das ist dann nicht nur ein sehr zeitintensiver Prozess, man muss sich dann teilweise mit der Funktionsweise von Programmteilen auseinandersetzen, die man zuletzt vor mehreren Monaten angesehen hatte. Wenn man nun diese Integration stetig parallel zur Entwicklung ausführt, erfährt man nicht nur schneller, wenn etwas nicht funktioniert, man ist auch noch direkt in der Materie drinnen, um dies schnell beheben zu können ohne sich wieder lange einarbeiten zu müssen. Dies kann bei größeren Projekten je nach Rechner durchaus schon mal eine halbe bis ganze Stunde pro Integration dauern. Und sämtliche Abhängigkeiten müssten auch noch erfüllt werden. Da ist eine zentrale Stelle fürs Compilieren bzw. der Build Erstellung schon eine erhebliche Erleichterung. Finden tut man dies auch in der Open Source Szene häufig in Form sogenannter Nightly Builds.
Erweitert wurde dies dann in einigen Sprachen wie zum Beispiel Java um Unittests, die vor jedem Build durchlaufen werden um Fehler die durch Änderungen entstehen schneller auffinden zu können. Dazu kamen dann später noch zusätzlich CodeSniffer, die auf unsaubere Codestellen hinweisen sollen, Programme zur statistischen Auswertung des Codes und welche zur Generierung von Dokumentationen. Und dies wäre dann auch schon eine Beschreibung einer Kontinuierlichen Integration Umgebung.
Die bekanntesten und verbreitetsten sind wohl Hudson und CruiseControl, welche beide in Java geschrieben sind. Und das war auch schon der Grund, wieso wir uns erstmal weiter nach Alternativen umgesehen haben. Java ist nämlich nicht unbedingt unser Freund und wir hätten möglichst gerne etwas in der Sprache, die wir auch zum Entwickeln nutzen, weil wir gerne verstehen würden wie es funktioniert, oder zumindest verstehen wollten wieso, wenn etwas nicht funktioniert.
Schließlich hörten wir von der Project Tracking Software Arbit. Nicht nur, dass es komplett in PHP geschrieben ist, es verwendet als Backend CouchDB, welches wir so auch endlich mal gut im Einsatz erleben können und Beispiele für die Verwendung haben. Es gibt jedoch einen durchaus gravierenden Haken. Der derzeitige Release ist noch als Alpha gekennzeichnet. Dies bezieht sich jedoch nicht auf die Stabilität, sondern darauf, dass es noch nicht alle Funktionen besitzt, die von einer vollständigen continuous integration Plattform erwartet würden und das einrichten noch relativ unkomfortabel über das editieren von mehreren Konfigurationsdateien pro Projekt geht. Jedoch muss ich sagen, dass viele der für die Entwicklung genutzten Funktionen bereits verfügbar sind und einwandfrei funktionieren, wenn sie denn erst mal eingerichtet sind.
Wer sich ein arbeitendes Beispiel ansehen möchte, Arbit nutzt sich selbst als continuous integration Umgebung. ( http://tracker.arbitracker.org/arbit ) Wer Support sucht, findet ihn am ehesten via IRC auf dem freenode server in #arbit bzw auf Deutsch in #arbit-de. Und wie sollte es auch anders sein, freiwillige Tester und Entwickler werden mit offenen Armen willkommen geheißen.