Produktinnovation
ist in einer digitalisierten Welt der Schlüssel zum Erfolg. Um sich vom
Wettbewerb abzuheben, sollen Innovationen so rasch wie möglich und voll
funktionsfähig an den Markt gebracht werden. Doch konventionelle
Entwicklungsmethoden sind meist schwerfällig und bremsen die Time-to-Market. Um
die Zeitspanne zwischen Entwicklung und Marktveröffentlichung zu verkürzen,
sind in der Vergangenheit effektive Ansätze entwickelt worden.
Bei konventionellen
Vorgehensweisen, vergehen teilweise Monate bis es zu einem Release kommt.
Zunächst müssen alle Fehler behoben und Funktionen entwickelt bzw. erweitert
werden. Erst danach folgt ein großes Update. Dabei werden beinahe alle
Änderungen und Anpassungen manuell durchgeführt und der Prozess wird dementsprechend
anfälliger für Fehler. Der gesamte Prozess ist wenig flexibel sorgt oftmals für
komplexe Workarounds für die Entwickler.
Eine Lösung für
dieses umständliche Vorgehen muss her. Ein lohnender Ansatz soll den
Entwicklungsprozess von Software vereinfachen und zugleich beschleunigen: Das
CI/CD.
Unterschied
zwischen Continuous Integration (CI) und Continuous Delivery (CD)
Was ist also CI/CI? CI bzw. CD steht für Continuous Integration bzw. Continuous Delivery. Continuous Integration (CI) ermöglicht eine kontinuierliche Integration von neuem Code in ein gemeinsames Repository während Continuous Delivery (CD) für die Überführung des Codes von Repository in die Produktion zuständig ist.
Durch die Anwendung
von CI/CD können sowohl die Fehlerquote als auch der Release-Zyklus minimiert
werden. Im ersten Schritt, der Continuous Integration, testet der Entwickler
den von ihm produzierten Teil des Codes bevor er ihn in das Controle-Repository
übermittelt. Danach folgt meist eine neue Quellcode-Version, welche mittels
Unit-Tests auf Fehler geprüft und in Testumgebungen eingefügt wird. Hier werden
auch ganzheitliche Systemtests durchgeführt. Wenn der neue Teil des Codes
erfolgreich alle Tests durchlaufen hat, wird das Team automatisch
benachrichtigt. Zudem werden Informationen über die Anzahl der Tests und der
gefundenen Fehler gesammelt.
Continuous Delivery
(CD) setzt dort an, wo Continuous Integration endet. Bevor Software in die
Produktionsumgebung übermittelt wird, werden Systemtests, Unit-Tests (inklusive
API-Tests und Lasttests) und Integrationstests durchgeführt. Diese Tests sind
allesamt Teil von Continuous Delivery und werden automatisch durchgeführt. Über
den kompletten CI/CD-Prozess hinweg, können Fehlermeldungen rasch und direkt
über Feedback-Kanäle an die Entwickler weitergeleitet werden.
Nachfolgend sind die relevantesten Vorteile von CI/CD aufgelistet, die letztlich in einer Kostensenkung resultieren.
- Kleine Schritte: Statt große Teile des Codes auf einmal zu integrieren und in späterer Folge deren Fehler umständlich zu beheben, werden bei CI/CD mehrere kleinere Teile in das Repository eingefügt. Das Continuous Testing wird dadurch erleichtert, weil nur kleinere Stücke untersucht werden müssen und mögliche Probleme somit eher gefunden werden.
- Kürzere Release Rates: Durch das rasche Erkennen und Beheben von Fehlern, können mehrere kleinere Code-Teile in kürzeren Abständen released werden. Dies ist allerdings nur möglich, wenn in einem kontinuierlichen Prozess entwickelt und der Code in einem releasefähigen Zustand gehalten wird.
- Ordentlicher Backlog: Wird CI/CD in den Entwicklungsprozess integriert, so verändert sich die Fehlerquote im Backlog. Da kleinere Fehler rascher gefunden werden, kann sich das Team auf kritische Probleme konzentrieren.
- Einfache Wartung: Mithilfe von Microservices können einzelne Bereiche eines Systems heruntergefahren werden ohne das restliche System betroffen ist. Somit können Wartungsarbeiten nahezu unbemerkt stattfinden.
- Continuous Feedback: Durch die regelmäßige Integration des Codes, entsteht eine verlässliche und kontinuierliche Feedbackschleife. In dieser befinden sich vor allem Entwickler. Deren Rückmeldung zu Pipeline Build-Fehler, Merging-Problemen, Architektur-Rückschlägen usw. ist enorm wichtig für den gesamten Prozess.
Darauf
sollte geachtet werden
Den Entwicklern soll die Arbeit mit dem CI/CD-Ansatz erleichtert werden, weshalb ein einfacher Prozessaufbau essentiell ist. Je weniger sie sich mit dem eigentlichen Prozess und manuellen Aufgaben aufhalten, desto effektiver kann gearbeitet werden. Zudem sollten Entwickler bis auf wenige Ausnahmen, direkt am Master-Branch arbeiten um eine sofortige Integration und das zugehörige Testen zu ermöglichen.
Wird CI/CD in den
Entwicklungsprozess von Software integriert, so müssen automatisierte Tests auf
allen Ebenen durchgeführt werden. Dies schließt mitunter Unit-, Integrations-
und Systemtests ein, genauso wie automatisierte Tests für Funktionalität,
Benutzerfreundlichkeit, Leistung, Last, Stress und Sicherheit durchgeführt
werden müssen. Erst dann kann von CI/CD ganzheitlich profitiert werden.
Als nützliche Tools erweisen sich beispielsweise Repository-Management-Systeme wie Gitlab und Bitbucket oder Services für die Build-Automatisierung wie Jenkins oder eben auch Gitlab. Beispiele für die Testautomatisierung sind das Tool Katalon Studio oder jUnit in der Javawelt. Aber die Auswahl ist praktisch unendlich.
Fazit
Continuous Integration und Continuous Deployment zerstückeln den Entwicklungsprozess in kleine Teile. Diese Teile werden in regelmäßigen Abständen in ein gemeinsames Repository integriert und nach dem Testen dem Kunden rasch zur Verfügung gestellt. Sie sind ein zentrale Teil der DevOps-Methodik. Der gesamte Entwicklungsprozess wird übersichtlicher und flexibler, dadurch werden Fehler einfacher gefunden und behoben. Um mit der Konkurrenz mitzuhalten bzw. diese sogar zu übertreffen und unnötige Fehlersuche zu vermeiden, ist die Integration von CI/CD in den Entwicklungsprozess also eine einfache, effektive aber auch mittlerweile unverzichtbare Methode.