In vielen Diskussionen zum Thema Continuous Integration – insbesondere mit Personen, die nicht so tief in der Software-Entwicklung stecken – erlebe ich immer wieder, dass die Begriffe Continuous Integration (CI), Continuous Delivery (CD) und Continuous Deployment (CD) unterschiedlich interpretiert oder sogar als Synonym verwendet werden. Dabei gibt es klare Ziele, die mit CI/CD und DevOps verfolgt werden.
In diesem Blogbeitrag möchte ich die Begrifflichkeiten und ihre Bedeutung daher einmal auf einem etwas höheren Abstraktionslevel erläutern und so vielleicht auch denjenigen Personen einen Überblick zu dem Thema geben, die nicht so tief in die Thematik involviert sind, ggf. aber auch immer wieder mit diesen aktuellen Themen konfrontiert werden.

Warum CI/CD?

Im Rahmen der fortschreitenden Digitalisierung und der Digitalen Transformation stehen alle Unternehmen vor der Herausforderung, ihre IT-Anwendungen schnellstmöglich anzupassen und an die sich ständig ändernden Anforderungen ausrichten zu können. Schnelle und qualitativ hochwertige Softwareentwicklung ist mittlerweile einer der wichtigsten Wettbewerbsfaktoren für nahezu alle Unternehmen. Daher ist die Beschleunigung und Automatisierung entsprechender Prozesse essentiell. Release-Zyklen müssen drastisch verkürzt werden, um zeitnah neue Funktionen bereit stellen zu können. Zusätzlich müssen die Insel-Lösungen in den Fachbereichen, die erst durch eine zu langsam agierende IT entstehen, enorm reduziert werden.
Im Rahmen dieser notwendigen Beschleunigung von IT-Entwicklungsprojekten spielen die Themen CI (Continuous Integration) und CD (Continuous Delivery sowie Continuous Deployment) eine wesentliche Rolle, da sie essentieller Bestandteil einer agilen Softwareentwicklung sind. Wichtig ist hierbei eine möglichst vollständige und durchgängige Automatisierung aller Prozesse. Nur so kann eine wirklich agile Software-Entwicklung gewährleistet werden.

Continuous Integration

Unter CI wird das Integrieren der Code-Komponenten jedes Entwicklers in die Entwicklungs- bzw. Testumgebung verstanden. Integrieren bedeutet hierbei das Bereitstellen des Codes in einer Versionsverwaltung, die Übersetzung des Codes sowie das Testen der einzelnen Codefragmente und der Integrationstest mit den übrigen Codekomponenten der zu entwickelnden Softwareumgebung. Ziel ist es, möglichst zeitnah den erstellten Code mit den übrigen Ergebnissen zu testen, zeitnahes Feedback zu möglichen Fehlern zu erhalten und die Ergebnisse anderen Entwicklern bereit zu stellen. Zeitnah heißt hierbei idealerweise mehrmals täglich.
Die automatisierten Tests (Unit Tests/Integration Tests) werden hierbei auf einem unabhängigen Build-Server umgesetzt.

Continuous Delivery

CD ist der nächste Schritt in einem möglichst automatisierten Entwicklungsprozess. Hierbei wird der bestehende Code in eine lauffähige und idealerweise auslieferbare Softwareversion übersetzt. Meist wird diese Version in einer produktionsähnlichen Umgebung bereitgestellt. Die so gebaute Software könnte dann direkt in Produktion genommen werden. Es wird also aus dem getesteten Code des CI Prozesses – möglichst automatisiert – eine produktionsreife Version innerhalb einer produktionsnahen Umgebung erzeugt. Diese Prozesskette in Verbindung mit den verwendeten Tools wird auch als Delivery Pipeline bezeichnet.

Continuous Deployment

Continuous Deployment wird auf Grund des gleichen Kürzels (CD) oft mit Continuous Delivery verwechselt oder synonym verwendet. Unter Continuous Deployment wird aber noch ein weiterer Schritt im Entwicklungsprozess verstanden. Bei Continuous Delivery wird eine produktionsreife Software erstellt, die aber noch nicht automatisiert in Produktion genommen wird. Hier gibt es noch die Entscheidungsoption ob und wann die Software im Produktionssystem bereitgestellt werden soll.
Beim Continuous Deployment hingegen wird automatisch die erstellte Software in die Produktionsumgebung überführt. Mittels eines komplett automatisierten deployment-Prozesses ist man also in der Lage, jede Änderung, die entsprechende Tests erfolgreich durchlaufen hat, unverzüglich in der Produktion zu nutzen.
In diesem Zusammenhang fällt auch immer wieder der Begriff “Deployment Pipeline”. Die Deployment Pipeline ist quasi das Herzstück einer agilen und automatisierten Softwareentwicklung.

DevOps

DevOps ist ein weiterer Begriff, der im Rahmen agiler Softwareentwicklung immer wieder auftaucht und hier auch zusätzlich kurz erläutert werden soll.
DevOps ist eine Methode, die zum Ziel hat, die Prozesse der Softwareentwicklung bis in den Betrieb hinein zu beschleunigen und für eine Softwareentwicklung zu sorgen, die auf einen reibungslosen Betrieb ausgerichtet ist. Der Begriff setzt sich aus Development und Operations zusammen. Nachdem die Softwareentwicklung mittels CI/CD bereits so weit getrieben wurde, dass quasi jede Änderung sofort in Produktion übernommen werden kann, muß auch der Betrieb der Anwendungen entsprechend eng mit der Entwicklung verzahnt werden.
Wichtig ist es, ein „Crossfunktionales Team“ zu etablieren, in dem ein Aufgaben übergreifendes Verständnis vorherrscht und notwendige Feedbacks schnell die richtigen Adressaten erreichen. Informationen aus Monitoring-Systemen oder aus Support-Meldungen müssen zeitnah an die Entwickler weitergegeben werden, damit eventuelle Fehler kurzfristig behoben und direkt wieder bereitgestellt werden können.

Jetzt teilen auf:

Jetzt kommentieren