Softwareprodukte werden heutzutage in der Regel in Teams entwickelt, die ihre Arbeitsergebnisse in einer zentralen Build-Umgebung zu einer Einheit zusammenführen müssen. Der Continuous Integration-Ansatz (CI) sorgt dafür, dass neue Softwarekomponenten sofort flächendeckenden Tests unterzogen und danach zusammengeführt werden. Anstatt dies beispielsweise nur einmal täglich zu machen, werden im Rahmen des CI-Ansatzes neue Software-Builds erstellt, sobald eine Komponente für die Integration zugelassen wurde.

Softwareentwicklung und Kompilierung: ein Blick in die Vergangenheit

Eine Softwareanwendung setzt sich in der Regel aus einer Vielzahl einzelner Module zusammen. Dementsprechend ist die Vorgehensweise bei der Softwareentwicklung an diese speziellen Gegebenheiten angepasst, sodass das Gesamtprojekt häufig analog zu diesen Modulen von mehreren einzelnen Teams parallel entwickelt wird. Früher wurden Änderungen und Erweiterungen an dem Softwareprodukt in vielen Fällen in Form eines „Tagewerks“ realisiert. Konkret bedeutet das, dass die Zusammenführung der Änderungen, die von den isolierten Entwicklerteams innerhalb eines Arbeitstages erschaffen wurden, nur einmal täglich im Rahmen einer Kompilierung auf dem zentralen Build-Server konsolidiert wurden.

Erst danach wurden die neuen Funktionen und Features des Softwareprodukts im Kontext der erweiterten Codebasis getestet. Dieser traditionelle Ansatz der Softwareentwicklung birgt enorme Gefahren und Risiken. Falls ein neu geschaffener Code nicht kontinuierlich integriert und flächendeckenden Tests unterzogen wird, werden eventuelle Fehler im Code zu spät erkannt. Die Folgen sind zeitintensive und kostspielige Rückkopplungsprozesse. Vor der Einführung der Continuous Integration mussten einzelne Teams auf die Fertigstellung anderer benötigter Softwarekomponenten anderer Entwicklerteams warten, was sich auf die Effizienz des gesamten Projekts äußerst negativ auswirkt.

Continuous Integration im Überblick

Die Continuous Integration-Methoden, die in innovativen Unternehmen in Kombination mit DevOps zum Einsatz kommen, beziehen sich auf die kontinuierliche Integration einzelner Softwarekomponenten in die Gesamtcode-Basis (Codebase) des Softwareprojekts. Die wesentlichen Vorteile dieser Arbeitsweise spiegeln sich in den überschaubaren Schritten wider, die einen kontinuierlichen Arbeitsfluss fördern und die Möglichkeit bieten, Fehler in der Programmierung frühzeitig zu erkennen und zu beseitigen. Durch die gesteigerte Arbeitseffizienz ergibt sich eine höhere Softwarequalität. Die Arbeitsweise im Rahmen des Continuous Integration-Ansatzes unterscheiden sich stark, von der im obigen Absatz beschriebenen traditionellen Vorgehensweise. In Unternehmen, bei denen die kontinuierliche Integration zum Einsatz kommt, wird eine hohe Flexibilität gefordert.

Konkret bedeutet das, dass die in den kleineren Schritten vorgenommenen Änderungen oder Erweiterungen an dem Softwareprodukt in regelmäßigen Abständen zusammengeführt und getestet werden. Die Einspeisung wird über ein Versionsverwaltungssystem wie beispielsweise GitHub oder Bitbucket in einem unterteilten Code-Repository realisiert. Auf diesem Wege lassen sich Versionskontrollen durchführen, indem Build-Prozesse automatisiert werden, sodass stets die aktuelle Code-Version aus dem Repository übernommen wird.

Mehr zum Thema:
Was ist OPSI?

Vor- und Nachteile von Continuous Integration

Obwohl der Continuous Integration-Ansatz zahlreiche Vorteile mit sich bringt, zeigt sich im Alltag auch, dass CI nicht nur Vorteile hat. Dass die langwierige Integrationsphase am Ende eines Softwareprojekts abgekürzt werden kann, lässt sich nicht beschreiten. Auftauchende Probleme können frühzeitig beseitigt werden. Für eingespielte Teams ist die Umstellung auf Continuous Integration jedoch oft mit Komplikationen verbunden. Anstatt dann effizienter zu arbeiten, kann das Verfahren sogar mehr Zeit in Anspruch nehmen.

Vorteile:

– kontinuierliches Feedback

– Fehler lassen sich frühzeitig identifizieren

– eine granulare Arbeitsweise wird gefördert

aktuelle und funktionsfähige Versionen sind stets verfügbar

– alle Änderungen werden im Detail protokolliert

Nachteile:

– es müssen flächendeckende Test-Abläufe entwickelt und implementiert werden

– Umstellung von einem gewohnten Arbeitsprozess

– es werden zusätzliche Server und Entwicklungsumgebungen benötigt

Welche Tools kommen bei Continuous Integration zum Einsatz?

Der Continuous Integration-Ansatz lässt sich grundsätzlich ohne spezielle Tools umsetzen. Das ist jedoch oft mit viel Aufwand verbunden und erfordert einiges an Disziplin. Aus diesem Grund ist es viel einfacher, sich die Arbeit mit den richtigen Tools zu erleichtern. Diese helfen meist bei der Versionskontrolle und beim Kompilieren und Erstellen von Builds. Die bekanntesten CI-Werkzeuge sind:

Jenkins: Hierbei handelt es sich um ein bekanntes Java-Programm, das im Rahmen moderner Continuous Integration und Continuous Delivery-Prozesse eingesetzt wird.

Travis CI: Dieses Tools ist insbesondere wegen seiner reibungslosen Integration mit GitHub beliebt. Für Open Source-Projekte ist es kostenlos, für kommerzielle Softwareprojekte muss eine offizielle Lizenz gekauft werden.

Bamboo: Auch hier handelt es sich um ein Tool, das in der Programmiersprache Java erstellt ist. Wie Travis CI ist es für kommerzielle Projekte normalerweise kostenpflichtig, während es für Open Source-Projekte kostenlos genutzt werden kann.

CodeShip: Dieses Tool basiert auf der Container-Technologie, die von IT-Größen wie Google, Microsoft und Red Hat aktiv weiterentwickelt wird und aus der modernen Softwareentwicklung nicht mehr wegzudenken ist.

Einsatzgebiete

Continuous Integration ist insbesondere im Umfeld agiler Softwareentwicklung in Kombination mit DevOps sehr beliebt. Dieser moderne Ansatz hat immer zum Ziel, in kleinen, übersichtlichen Schritten zu arbeiten. Heutzutage gibt es keine Rechtfertigung, ein Softwareprojekt ohne einen Continuous Integration-Ansatz zu betreiben. Dies liegt vor allem an dem Erfahrungsschatz sowie der großen Anzahl an verfügbaren Tools. CI kann sein volles Potenzial jedoch erst dann entfalten, wenn alle Team-Mitglieder optimal in alle Prozesse eingebunden werden und das System mittragen. Aus diesem Grund kommt einer reibungslosen Kommunikation eine sehr wichtige Rolle zu.

Mehr zum Thema:
Was ist ein Compiler?
Letzte Artikel von Daniel Faust (Alle anzeigen)