Was ist Continuous Integration und was sind die Vorteile?
Die Entwicklung von Software stellt in der heutigen Zeit einen komplexen Prozess dar, in den bei einem größeren oder langfristigen Vorhaben zahlreiche Teilnehmer wie Entwickler, Tester oder Teams involviert sind, die jeweils Teilaufgaben - von einzelnen Funktionen über das Nutzerinterface (GUI) bis zu Überprüfung der Funktionalität und Sicherheit - übernehmen. Um mögliche Probleme bei der Zusammenführung und Kompatibilität der unterschiedlichen Programmteile und Instanzen frühzeitig zu erkennen, verwenden aufwendigere Projekte mittlerweile meist ein Verfahren, das unter der Definition "Kontinuierliche Integration" (Continuous Integration, CI) bekannt ist. Es dient dazu, die Entwicklung auf ein Minimum zu beschleunigen, bestehende Komponenten zu testen und eine sichere Verteilung (Continuous Delivery und Deployment) von Programmen und Updates zu ermöglichen.
Inhalt:
Was verbirgt sich hinter dem Prinzip "Kontinuierliche Integration"?
Welche Verfahren verwendet kontinuierliche Integration?
Wie arbeitet kontinuierliche Integration?
Welche Vorteile bietet kontinuierliche Integration?
Benötigt kontinuierliche Integration eine spezielle Umgebung?
Was verbirgt sich hinter dem Prinzip "Kontinuierliche Integration"?
Bis in das zweite Jahrzehnt des neuen Millenniums bestand die Entwicklung von Software meist aus einem rein prozeduralen und linearen Verlauf, bei dem mehrere Teams oder Entwickler unabhängig voneinander Aufgabe lösten. Anschließend wurden die einzelnen Komponenten manuell zusammengesetzt und unterliefen eine Test- oder Alphaphase, in der die meisten Fehler ausgemacht und beseitigt werden. Wurde ein Produkt als marktfähig eingestuft, erfolgte eine direkte Auslieferung über Diskette, CD, DVD und zuletzt Medien wie Blu-Ray an die Nutzer, wobei in erster Linie eine einzige funktionsfähige und zuverlässige Version im Vordergrund stand. Diese Praxis erweist sich in der aktuellen Situation als überholt - eine dauerhaft stabile, funktionale und sichere Software erfordert eine langfristige Entwicklung (Development), bei der Schwachstellen nachträglich erkannt und beseitigt werden können.
Dies bedeutet in der Praxis einen erhöhten Aufwand und Anspruch an die Zusammenführung der einzelnen Programmteile - diese müssen permanent auf eine Kompatibilität und korrekte Funktion untereinander überprüft werden. Kontinuierliche Integration stellt eine Lösung für dieses Problem dar, indem sie die Komponenten nicht erst am Ende des Entwicklungsprozesses, sondern stattdessen in kurzen Zeitabständen - in der Regel täglich, wöchentlich oder nach jeder Entwicklungsstufe - zusammensetzt. Hintergrund ist, dass bei einer späten Verzahnung der einzelnen Komponenten oft erhebliche Probleme auftreten, weil diese nicht oder unzureichend aufeinander abgestimmt sind. Sie sind nicht selten derart umfangreich, dass viele Entwickler diesen Schritt als die "Integrationshölle" (Hell of Integration) bezeichnen.
Kontinuierliche Integration hat das Ziel und den Zweck, diese Schwierigkeiten frühzeitig zu erkennen und bereits während der Entwicklung so weit wie möglich zu beseitigen. Sie verkürzt nicht allein die Zeitspanne bis zur Bereitstellung eines fertigen Produkts, sondern trägt ebenfalls dazu bei, die Qualität zu verbessern. Darüber hinaus erhöht kontinuierliche Integration die Effizienz, weil sich die beteiligten Programmierer besser aufeinander abstimmen und die Dopplung von Aufgaben sowie ein Mehraufwand beim Testen und Integrieren vermieden wird. Wegen seiner Vorteile hat sie sich weitgehend als Standard für komplexe Projekte etwa bei Content Management Systemen (CMS) etabliert
Welche Verfahren verwendet kontinuierliche Integration?
Damit eine kontinuierliche Integration erfolgreich abläuft, müssen dabei einige grundlegende Regeln, Voraussetzungen und Bedingungen erfüllt werden. Besonders wichtig sind:
- Zentraler, kollektiver Source Code mit einer verzweigten Versionsverwaltung wie Git oder Subversion (SVN)
- Kurze Intervalle zwischen den Test-Zyklen, damit kontinuierliche Integration häufig und rasch erfolgt
- Automatisierung wichtiger Schritte wie Übersetzung (Compiling), Linking und Testen
- Häufige und regelmäßige Integration, um Änderungen rasch zu implementieren, Fortschritte zu archivieren und Debugging zu erleichtern
- Entwicklung spezialisierter Test für möglichst viele Änderungen, die sich später automatisieren lassen
- Kollektive Verwendung eines einzelnen Zweigs (Branch) der Versionsverwaltung
- Automatisches Testen von Code und Einfügen in die verwendeten Repositories (Continous Delivery)
- Automatische Freigabe und Überführen nach der Testphase aus dem experimentellen in das produktive Stadium (Continuous Deployment)
Gemeinsam trägt diese Vorgehensweise die Bezeichnung CI/CD, wobei CD gleichzeitig für Continuous Delivery wie Continuous Deployment steht. Es handelt sich somit um drei Phasen, die in hoher Geschwindigkeit und bei einem minimalen Aufwand an Zeit und Arbeit zu einer qualitativ hochwertigen Software führen. Alle drei Etappen sind zudem miteinander verzahnt und können parallel stattfinden, so dass kein Leerlauf entsteht, weil zum Beispiel ein Team zunächst auf die Resultate eines anderen warten muss.
Wie arbeitet kontinuierliche Integration?
Ein grundlegendes Merkmal der kontinuierlichen Integration stellt die Automatisierung vieler Prozesse wie dem Testen und das Zusammenführen (Merging) unterschiedlicher Zweige der Entwicklung dar. Aus dem vorhandenen Repositories erstellen angepasste Skripte in kurzen Intervallen kontinuierlich eine lauffähige Version, die sich je nach Fortschritt in der Alpha- oder Beta-Phase befindet. Diese Version tragen den Namen Nightly Build, weil sie in der Regel täglich in der Nacht - also außerhalb der Arbeitszeit und nach dem Einreichen der Änderungen - erstellt und unmittelbar allen beteiligten Instanzen zur Verfügung gestellt werden. Als Mittel dienen dabei diverse Tools wie etwa die Webanwendung GitLab oder das Software-System Jenkins.
Es ist speziell in der Open Source Szene darüber hinaus üblich, dass Programmierer und Entwicklerteams die angefertigten Nightly Builds allen Interessierten frei zur Verfügung stellen. Auf diese Weise erhalten Nutzer stets eine aktuelle Software und tragen durch ihre Verwendung dazu bei, Bugs und Schwachstellen frühzeitig zu erkennen, bevor sie in eine stabile Version gelangen. Es handelt sich somit um eine spezielle Art des Beta-Testings, an der jeder freiwillig teilnehmen kann. Dabei bleibt zu betonen, dass es sich ein Nightly Build stets in einem experimentellen Stadium befindet. Sie sollten deshalb niemals auf produktiven oder systemkritischen Systemen zum Einsatz kommen, weil ihr aktueller Entwicklungsstand, die Performance sowie die Sicherheit und Stabilität nicht eingeschätzt werden können.
Welche Vorteile bietet kontinuierliche Integration?
Obwohl es sich bei der kontinuierlichen Integration um ein relativ junges Verfahren handelt, das erst seit etwa 2010 in Vorstufen zum Einsatz kam, hat sie sich seit ungefähr 2015 in der Softwareentwicklung durchgesetzt. Dies liegt insbesondere daran, dass sie verschiedene gravierende Vorteile gegenüber der früher üblichen Vorgehensweise aufweist. Sie trägt unter anderem dazu bei, folgende Aspekte einzuführen oder zu verbessern:
- Kurze Fristen zwischen Schreiben und Einspeisen des Codes (Check-in) in eine Versionsverwaltung
- Permanente Tests ermöglichen frühe Warnung bei Fehlern in dem Code oder der Integration
- Viele kleinere Änderungen statt weniger große erleichtern Debugging und Fehlersuche
- Automatisierte und kontinuierliche Prüfung von Code auf Qualität und Funktionalität
- Eine aktuelle Version für Tests, Vorführungen oder Weitergabe steht permanent zur Verfügung
- Höhere Effizienz bei niedrigerem Arbeitsaufwand und besserer Qualität
- Kombination mit Continuous Delivery und Continuous Deployment möglich
Um die Vorteile optimal nutzen zu können, empfiehlt es sich, entsprechende Umgebungen zu verwenden, die unterschiedliche Tools für die kontinuierliche Integration beinhalten.
Benötigt kontinuierliche Integration eine spezielle Umgebung?
Eine kontinuierliche Integration kann zwar theoretisch unabhängig von den verwendeten Tools der Entwickler auf einer zentralen Instanz durchgeführt werden - dieses bedeutet jedoch einen nicht zu unterschätzenden Aufwand bei der Einrichtung, Individualisierung und Betreuung. Sinnvoller ist es in den meisten Fällen deshalb eine Plattform wie zum Beispiel GitLab zu verwenden, die die benötigten Leistungen zur Verfügung stellt. Mittlerweile bieten zahlreiche Unternehmen zudem CI/CD im Rahmen von Software as a Service (SaaS) oder Infrastructure as a Service (IaaS) an. Diese umfassen neben einer Versionskontrolle ebenfalls unterschiedliche weitere Tools wie zum Beispiel eine zentralisierte Entwicklungsumgebung, auf die alle Beteiligten zugreifen können, um die Vorgehens- und Arbeitsweise zu vereinheitlichen. Nicht selten enthalten speziell kostenpflichtige Angebote zudem zusätzliche nützliche Tools wie zum Beispiel die für ein effizientes Projektmanagement entwickelte Software Redmine. Da viele der angebotenen Werkzeuge - darunter zum Beispiel ebenfalls GitLab und Redmine allerdings unter einer quelloffenen Open Source Lizenz stehen, ist es ebenfalls möglich, mit geringem finanziellen Aufwand eine passende Netzwerk- und Arbeitsumgebung für kontinuierliche Integration auf einem eigenen virtuellen oder dedizierten Server einzurichten.
Foto: Gerd Altmann auf Pixabay
Schreibe einen Kommentar
- Entwicklung
Tags zu diesem Artikel
Weitere Webhoster
Weitere interessante Artikel
Was ist HTML 5 und welche Vorteile bietet es?
Wir zeigen euch alles Wissenswerte über HTML5 und wie ihr es am besten für euer neues Projekt nutzt.
Angular vs. React vs. vue.js - was ist das beste Framework für Javascript?
Angular vs. React vs. vue.js - Wir zeigen euch was das beste Framework für Javascript für euer nächstes Projekt ist.
Das Framework Symfony - Was kann es und wofür eignet es sich?
Das Framework Symfony - Wir zeigen euch die entsprechenden Vor- und Nachteile gegenüber anderen Frameworks.
Zend Framework - Wie funktioniert das Werkzeug für PHP Programmierung?
Das Zend Framework - wir zeigen euch die Vor- und Nachteile des PHP Frameworks.
Was ist die Versionskontrolle Git?
Wir erklären euch was Git ist und mit welchem Dienst ihr eine sichere Versionskontrolle erledigt.
Runtime oder Framework - was ist Node.js?
Node.js als Alternative zu JavaScript freut sich einer immer höheren Beliebtheit. Wir zeigen Vor-und Nachteile.
Im Jahr 2006 riefen wir hosttest ins Leben, um den Webhosting Markt im DACH-Raum transparenter zu machen. Mit derzeit über 400 Webhostern und über 10.000 Angeboten bieten wir dir die beste Grundlage, den für dich passenden Anbieter für Hosting-Leistungen zu finden.
Seit 2015 küren wir zudem alljährlich unsere Webhoster des Jahres und würden uns in Zukunft auch über deine Stimme freuen.
Mehr über uns...