Bei Softwareentwicklung spricht jeder von Automatisierung und von Qualität. Ein CI/CD Konzept hilft dir, diese Ziele zu erreichen. Durch kontinuierliche Integration ("CI" = "Continuous Integration") kannst du früh Inkompatibilitäten und Fehler in deinen Änderungen erkennen und verhindern, dass Fehler es überhaupt nur ansatzweise bis in die Produktionsumgebung schaffen. Zum Setup jedes Projektes gehört also eine geeignete Continuous Integration Strategie.
Softwareprojekte werden immer größer und komplexer. Viele Schnittstellen sind angebunden und viele Entwickler sind beteiligt. Es wird modular gearbeitet und alle Teile eines Projektes sollen sich nahtlos ineinander fügen. Was immer erst romantisch klingt kann am Ende sehr aufwendig werden. Es kommt vor, dass Entwickler ein paar Tage ihre Änderungen nicht synchronisieren, oder Einstellungen ändern, an denen gerade auch andere Entwickler arbeiten. Das Ergebnis sind Konflikte, die immer erst aufgelöst werden müssen. Zeit ist dabei ein entscheidender Faktor; Wenn alle Änderungen erst zum Release zusammengeführt werden entstehen Hindernisse, die hätten vermieden werden können.
Continuous Integration beschreibt, wie Änderungen kontinuierlich integriert werden. Das reduziert Reibungspunkte und führt zu stabilerer Software. Erreicht wird das durch eine Continuous Integration Pipeline, die durch verschiedene Herangehensweisen und Werkzeuge versucht, den Entwicklungsprozess zu verbessern.
Um Integrationsprobleme zu vermeiden kann man vor allem eines tun: Kontinuierlich integrieren! Je öfter Änderungen synchronisiert werden, desto besser lassen sich früh Problemstellen erkennen und beheben. Dabei durchläufst du folgende Pipeline:
Du solltest beim Aufbau außerdem an folgende Ansätze und Schlüsselprinzipien halten:
Alles was zu einem Projekt gehört sollte auch an einer zentralen Stelle gesammelt werden. Es kommt leider oft vor, dass Dinge, die eigentlich zusammen gehören, getrennt werden. Das resultiert in aufwendigen Änderungsprozessen. Für eine kleine Änderung müssen mehrere Repositories angefasst werden, es laufen zwei verschiedene automatisierte Pipelines und die Projekte haben teilweise so wenig miteinander zu tun, dass man an dieser Stelle kaum noch von Integration sprechen kann. Deswegen: Monorepos! Sammele alles was zu einem Projekt gehört auch in diesem Projekt. Dazu zählen Code, Dokumentation, Testdaten und Konfigurationen.
Bei einem Build Prozess spricht man meist von den Schritten Compiling und Linking. Aber an dieser Stelle sollte Continuous Integration noch nicht aufhören. Fester Teil der Continuous Integration Pipeline ist die Automatisierung von Unit Tests. Die Tests sollten bei jedem Integrationszyklus ausgeführt werden, damit Fehler sofort entdeckt werden können und der fehlerhafte Code es erst gar nicht bis ins Deployment schafft.
Die meisten Konflikte entstehen, weil zu lange nicht integriert wurde. Zwei Entwickler arbeiten an zwei Branches, eine Woche getrennt, an ähnlichen Features: Das Chaos ist perfekt. Nur wenn diese Konflikte sofort aufgelöst werden lassen sich katastrophale und undurchsichtige Merge Konflikte umgehen. Als Richtwert kann man ansehen, dass jeder Entwickler einmal täglich in die Mainline integrieren sollte, um Konflikte früh zu erkennen und zu beseitigen, bevor sie ein Problem werden.
Die CI Pipeline wird bereits viele Fehler früh entdecken, wenn sie noch einfach zu beheben sind. Die fehlerfreien Builds sollten danach jedoch umgehend ausgeliefert und danach in eine Testumgebung deployed werden, die im besten Falle eine komplette Spiegelung des Produktiv Netzwerkes darstellt. In einem anderen Artikel habe ich bereits erklärt, warum Continuous Delivery so wichtig ist.
Das ist natürlich nicht die ganze Geschichte. Wenn du dich jedoch an oben genannte Schlüsselprinzipien hältst wird sehr schnell klar, wo uns Continuous Integration hilft und warum sie so sinnvoll ist.
Für das eigene Projekte eine Continuous Integration Pipeline zu definieren und zu benutzen ist in der Realität natürlich nicht immer einfach. Aber jeder kleine Schritt in diese Richtung erhöht Stück für Stück die Qualität deines Softwareentwicklungsprozesses. Allein durch die Beschäftigung mit der Ausführung und dem Testing deiner Software siehst du dein Projekt nochmal aus einem anderen Blickwinkel und gewinnst wertvolle Erkenntnisse. Das Ziel einer kompletten CI/CD Strategie vor Augen solltest du jetzt weiter auf deine Continuous Integration bauen. Worauf wartest du? Was sind deine Erfahrungen? Schreib es in die Kommentare!