Nun, bevor ich darauf eingehe, möchte ich erst kurz den Begriff klären. Continous Integration bedeutet das permanente Neubilden und Testen einer Anwendung und ist insbesondere bei der Arbeit im Team ein nicht zu unterschätzender Vorteil.
Viele werden dieses Problem kennen - man arbeitet seit Stunden oder sogar Tagen an einem Problem und nun endlich – die Lösung! Man schreibt seine Tests, programmiert die Klasse und das Entwicklerherz macht Freudensprünge beim Anblick der abgehakten To-Do-Liste und des grünen Balkens. Alles funktioniert – perfekt! Jetzt muss es nur noch per SVN eingecheckt werden und der Feierabend winkt. Gesagt, getan und nun wird entspannt. Allerdings hält die Entspannung nicht sehr lang – wenn Sie nicht noch am gleichen Abend einen Anruf von einem Kollegen erhalten maximal bis zum nächsten Morgen weil schon eine ganze Meute verärgerter und gestresster Kollegen wartet, die sich ständig die gleichen Fragen stellen – Warum funktioniert das nicht mehr? Wer war das? Was ist hier los?
Und genau hier schafft Continous Integration Abhilfe. Sobald ein Software-Entwickler eine Funktionalität umgesetzt hat werden die Ergebnisse zum Beispiel per SVN eingecheckt und der Continous Integration Server übernimmt ab jetzt vollständig automatisch die Arbeit.
Er prüft ständig ob es Neues im SVN gibt und checkt ggf. alle gewünschten Packages neu aus. Anschließend durchläuft er die Test-Suite idealerweise bestehend aus Unit-Tests - erstmal wollen wir wissen ob die Teile der Anwendung in sich geschlossen funktionieren - und Integration-Tests – dann ob denn auch alle Teile der Anwendung im Zusammenspiel funktionieren. Seien Sie sich sicher, der Continous Integration Server wird Sie unmittelbar alarmieren wenn etwas fehlschlägt und sie so vor einem bösen Erwachen bewahren.
Gut, Sie werden jetzt vielleicht sagen „Das kenn ich alles!“. Das stimmt sicherlich aber es geht auch nicht um die Tests an sich sondern darum dass diese permanent und automatisch ausgeführt werden sobald es Änderungen in der Anwendung gibt. Das Stichwort lautet Early Error Detection und diese kann eben nicht zufriedenstellend und effektiv manuell durchgeführt werden. Für die Qualität einer Anwendung ist das aber einer der wichtigsten Aspekte da es schwer, mitunter sogar unmöglich ist, Fehler Wochen oder Monate nach Fertigstellung einer Anwendung nachzuvollziehen. Dies muss zeitnah geschehen.
Aus diesem Grund sollten die Commits idealerweise mehrmals täglich von jedem Entwickler durchgeführt werden, eben permanent sobald es Änderungen gibt. Somit arbeitet man einerseits ständig mit dem aktuellen Stand und anderseits bekommt man sofort Rückmeldung wenn es zu Konflikten zwischen Teilen der Software kommt.
Und wo gibt es jetzt einen Continous Integration Server? Das ist ganz einfach! Einer der bekanntesten dürfte CruiseControl sein. Dieser basiert auf Java kann aber auch für Perl, Ruby oder für unseren Favoriten, PHP, eingerichtet werden. Für PHP hat Manuel Pichler ein hervorragendes Plugin (phpUnderControl) entwickelt welches die Arbeit mit PHP-Projekten erheblich erleichtert. So kann man ganz einfach automatisch eine Dokumentation von der Anwendung erstellen lassen oder den Code einer PHP Code Sniffer Analyse unterziehen. Ein optisch ansprechendes Web-Interface über welches man leicht einen Überblick der letzten Änderung am Projekt erhält, die Dokumentation und Testergebnisse einsehen kann und noch vieles mehr, runden CruiseControl in Verbindung mit phpUnderControl zu einem professionellen Projekt-Verwaltungs-Werkzeug ab.
Und das bedeutet die Team-Arbeit läuft entspannter ab, man hat zu jeder Zeit einen Überblick über den Zustand der Anwendung und die Sicherheit dass die Anwendung funktioniert wie Sie soll. Es werden nie mehr stundenlange Debugging-Sessions nötig sein weil ständig unerwartet schwer nachzuvollziehende Probleme auftreten. Das passiert mit Continous Integration nicht und davon profitiert jeder!