Continuous Delivery
# Continuous Delivery

Continuous Delivery (CD, „fortlaufende Auslieferung“) bezeichnet eine Sammlung von Techniken, Prozessen und Werkzeugen, die den Software-Auslieferungsprozess (englisch deployment) verbessern.

Techniken wie Continuous Integration (CI), Testautomatisierung und kontinuierliche Installation werden insbesondere in Kombination mit agilen Methoden eingesetzt, um den Entwicklern schnelles Feedback auf Änderungen zu geben und die Software-Qualität während der Weiterentwicklung aufrechtzuerhalten. Software-Build-Jobs auf CI-Servern wie Jenkins ermöglichen ein automatisiertes Testen und Erstellen von „Nightly“- oder „Release“-Versionen. Diese Versionen können mit Hilfe von CD automatisiert auf Entwicklungs-, Test-, Integrations- und Produktivumgebung eingespielt werden.

Die Automatisierung der Integrations- und Auslieferungsprozesse ermöglicht schnelle, zuverlässige und wiederholbare Deployments. Erweiterungen oder Fehlerkorrekturen können somit mit geringem Risiko und niedrigem manuellem Aufwand in die Produktivumgebung oder zum Kunden ausgeliefert werden. Continuous Delivery wird primär in Kombination mit agilen Methoden eingesetzt. Für eine Einführung von Continuous Delivery wird häufig eine Umsetzung des DevOps-Ansatzes empfohlen.

## Prinzipien

Ein zentraler Begriff des CD ist die Deployment-Pipeline als Lean Poka Yoke: eine Menge von Validierungen, die eine Software auf ihrem Weg zur Veröffentlichung bestehen muss. Der Programmcode wird dazu für jede Änderung, die in der Versionsverwaltung gemacht wird, falls nötig auf dem Buildserver übersetzt und dann paketiert. Es wird eine Reihe verschiedener Tests (eventuell auch manuell) ausgeführt, bevor die Software als veröffentlichungsfähig bezeichnet werden kann.

Entwickler, die zu einem CD-Prozess wechseln und lange Veröffentlichungszyklen gewohnt sind, müssen ihre Entwicklungstechniken anpassen. Jede Version in der Versionsverwaltung soll zu jeder Zeit lieferbar sein. Entwicklungsmuster wie Featuretoggles helfen dabei, Code früh zu versionieren, auch wenn er noch nicht zur Verwendung durch den Endanwender gedacht ist. Andere Techniken wie Branching werden nicht überflüssig, müssen jedoch an den Prozess angepasst werden.

## Continuous Deployment

Obwohl umgangssprachlich oftmals synonym verwendet, bezeichnet der Begriff Continuous Deployment eine weitergehende Form des Continuous Delivery, bei dem auch die Auslieferung der Software auf die Produktivinfrastruktur automatisch durchgeführt wird. Im Gegensatz dazu wird die Software bei Continuous Delivery nur in eine Staging-Area ausgeliefert, von der sie dann manuell auf die Produktivinfrastruktur veröffentlicht werden kann.

