MicroAbstract2: Continous Integration in der Software-Entwicklung mit Continuum

„Je öfter, umso besser.“ Das ist der Grundgedanke von Continous Integration. Verbunden ist damit der Build aus den Quell-Dateien und das anschließende Deployen auf Integrations- und Testumgebungen. In den Strukturen heutiger Software-Projekte ist eine fortlaufende Produktion und damit ein geschlossener Build-Zyklus ein wichtiges Kriterium für die Auswahl der Entwicklungsumgebungen. Neben den Aufgaben des Software-Architekten, sind vor allem die Konzeptionierer, Programmierer und Tester auf einen geschlossenen Kreislauf der Software-Entwicklung angewiesen. Geschlossene Software-Entwicklung bedeutet in diesem Zusammenhang, den Build eines Software-Projektes anzustoßen, sobald die Entwickler ihre Änderungen eingecheckt haben. Permanente und zeitnahe Integration basiert dabei zu großen Teilen auf dem Vorhandensein eines Versionierungs- und Repository-Systems, das von den Entwicklern für das Projekt (und die Subprojekte) benutzt wird. Im Gegensatz zum oft noch eingesetzten „Nightly Build“ ist Continous Integration nicht auf die Nachtstunden angewiesen, wenn alle Programmierer ihren Code in das Repository eingecheckt haben. Der Vorteil von permanenten und zyklischen Build- und Test-Prozessen besteht in der Früherkennung von Software-Fehlern und Integrationsschwierigkeiten von Subkomponenten und Projekt-Modulen. Somit werden Fehler unmittelbar nach dem Einchecken des Programmierers beim Build deutlich und können zeitnah behoben werden.

Die Apache Software Foundation (ASF) bietet Entwicklern mit dem Open Source System Continuum eine Plattform für Continous Integration. Es handelt sich dabei um eine Serversoftware, die für Enterprise-Lösungen konzipiert und optimiert ist. Neben den zweckgebundenen Aufgaben von Continous Integration, wie automatisierte Builds, einem Release-Management und rollenbasierter Webverwaltung, bietet es vor allem eine Integrations-Möglichkeit für die verbreiteten Build-Tools Apache Ant und Apache Maven1/Maven2, sowie eine Unterstützung für Shell-Scripts. Continuum bietet sowohl kleinen, als auch großen Teams wichtige Komponenten, wie zum Beispiel Build-Notifications und External-Access. Bei der Konfiguration der Prozesse werden die Builds anhand von Templates und Queues in das System eingepflegt und verwaltet. Bei direktem Zugriff auf ein Maven-Repository ist es zum Beispiel möglich, die pom.xml-Dateien in den Build-Prozess einzubinden und mit einem konfigurierbaren Intervall von Continuum bauen zu lassen. Fehler bei JUnit-Tests oder Integrations-Probleme, die auftreten, werden dem Programmierer direkt per eMail, Jabber,IRC oder GoogleTalk mitgeteilt. Bei größeren Projekten, die Abhängigkeiten zu anderen Modulen haben, werden alle Abhängigkeiten berücksichtigt und mittels Queue-Verfahren nacheinander gebaut. Mit dem integrierten Release-Management und einem der verbreiteten Versionierungs-Systeme im Backend können Tags, Branches und Trunks verwaltet werden. Continuous Integration ist ein wichtiges Werkzeug in der Software-Entwicklung.

Gerade heute wird es für Software-Architekten und –Tester zunehmend wichtiger, möglichst unabhängig von Programmierern zu arbeiten. Eine kontinuierliche (Neu-)Bereitstellung der Software auf Integrationsumgebungen spart Zeit und Kommunikation. Die Basis dafür ist das Continuum-System der ASF, das durch seine Open Source Gemeinde zunehmend an Bedeutung gewinnt. Diese Bedeutung spiegelt sich auch in den zahlreichen Enterprise-Projekten wider, die mit Hilfe von Continuum realisiert werden.