Von Continuous Integration zu Continuous Delivery

Continuous Integration (CI) ist die Methode, neuen oder geänderten Quellcode fortwährend und möglichst häufig mit bereits vorhandenem Code zu integrieren und anschließend zu bauen und zu testen. Ziel hierbei ist es, Integrationsfehler so früh wie möglich erkennen und zu beseitigen. Diese Vorgehensweise ist vollständig automatisierbar und seit vielen Jahren ein De-Facto-Standard in der Software-Entwicklung.

1 - Bestandteile CI-System

Die Zielgruppe von CI sind Entwickler, die zufrieden sind, dass der CI Server klar signalisiert, wenn eingecheckte Quellcodeänderungen erfolgreich gebaut und getestet sind. Themen wie Bereitstellung zum Benutzertest oder Produktivsetzung sind dabei nicht von direkter Bedeutung.

Dem Kunden der Software andererseits ist der Status dieses CI Servers gleichgültig. Ihn interessiert die Verfügbarkeit neuer Funktionalität auf seinem Produktivsystem, so dass diese auch tatsächlich zum Einsatz kommen kann.

Dev To Customer

Zwischen einem erfolgreichen CI Build und der Verfügbarkeit für den Kunden liegt jedoch der Release. An diesem sind in der Praxis oft mehrere Personen beteiligt, die viele Aufgaben von Hand erledigen müssen, was wiederum hohe Fehlerraten nach sich zieht. Wenn es gelänge, den Release-Schritt besser in den Griff zu bekommen, wäre man in der Lage, neue Features und Bugfixes, egal wie klein diese sind, schnell und fortwährend nach deren Fertigstellung dem Kunden verfügbar zu machen.

Der Lakmustest für Ihre diesbezüglichen Fähigkeiten lautet:

"How long would it take your organization to deploy a change that involves just one single line of code?"
– Mary Poppendieck - Autorin von Lean Software Delelopment

Change Over Time

Die Idee, neue Features fortwährend und zeitnah nach deren Fertigstellung im Produkt bereitzustellen zu können, findet sich bereits im ersten Prinzip des Agilen Manifests. Sie trägt dort zudem bereits ihren einprägsamen Namen:

„Our highest priority is to satisfy the customer through early and continuous delivery of valuable software“

Wirklich bekannt gemacht wurde der Begriff Continuous Delivery (CD) aber erst durch das gleichnamige Buch von Jez Humble und David Farley, welches die zwei Schwerpunkte „Automation“ und „Collaboration“ behandelt, um sowohl die technischen als auch die (zwischen-) menschlichen Aspekte dieses Themas zu würdigen. Die zentrale technische Abstraktion des Buches ist die so genannte Deployment Pipeline, welche das Herzstück des dortigen CD-Prozesses bildet und somit als Aufhänger aller weiteren Prinzipien und Methoden dient:

3 - Exemplarische Deployment Pipeline

Schließt man sich diesem Bild an, so kann bei der Frage nach Werkzeugen für Continuous Delivery direkt auf das bereits existierende CI-Server-Angebot verwiesen werden. Die meisten der heutigen CI Server besitzen Funktionalitäten, welche es erlauben, eine solche Deployment Pipeline inklusive ihrer Bestandteile Stage, Job und Trigger umzusetzen. Dieser Gedanke wird auch von Humble und Farley aufgegriffen:

The deployment pipeline has its foundation in the process of continuous integration and is in essence the principles of continuous integration taken to its logical conclusion.

Neben dem Ergänzen des vorhandenen CI-Ansatzes rund um Pipeline-Funktionalität sind heute auch gute sogenannte „Infrastructure as code“-Werkzeuge verfügbar, die ebenfalls in die Deployment Pipeline eingebunden werden können. Dementsprechend sollte Continuous Delivery über die „letzte Meile“ hin zum Release und damit dem Kunden eigentlich nichts mehr im Wege stehen.

5 - CI in Deployment Pipeline

Daran schon gedacht?
Continuous Delivery – klingt gut, aber offene Punkte verbleiben:

  • Wie kann ich prüfen, welche meiner Features bereits wo ausgeliefert / in Betrieb sind?
  • Was mache ich, wenn ein Feature nicht fertig ist, aber ein Release ansteht?
  • Wie dokumentiere ich die fachliche Freigabe der Releases?

Auf der Basis einer Continuous-Delivery-Lösung mit Atlassian-Werkzeugen lassen sich diese Aspekte problemlos in den Griff bekommen – out of the box.