Continuous Delivery bezeichnet gemäss Wikipedia eine Sammlung von Techniken, Prozessen und Werkzeugen, die den Softwarelieferprozess verbessern. Techniken wie Testautomatisierung, kontinuierliche Integration (Continuous Integration) und kontinuierliche Installation erlauben die Entwicklung qualitativ hochwertiger Software, die durch automatisierte Release-Erstellung auf Entwicklungs-, Test-, Integrations- und Produktivumgebung eingespielt werden kann. Die Automatisierung der Test- und Lieferprozesse ermöglicht es, schnell, zuverlässig und wiederholbar zu liefern und Erweiterungen und Fehlerkorrekturen mit geringem Risiko und niedrigem manuellem Aufwand in die Produktivumgebung oder zum Kunden zu bringen. Die kontinuierliche Integration beschreibt dabei den Prozess des fortlaufenden Zusammenfügens von Komponenten zu einer Anwendung.
Die Releasezyklen sind kurz und Innovationen können rasch von der Entwicklung über das Testen in die Produktion überführt werden. Das Deployment der Komponenten verläuft voll automatisiert. Manuelle Eingriffe sind grundsätzlich verpönt und sollen unterlassen werden. Continous Delivery hat sich in der Softwareentwicklung breit durchgesetzt und erobert immer mehr auch die Infrastruktur (Infrastructure as a Code, bzw. Everything as a Code).
Der Begriff DevOps wiederum setzt sich zusammen aus «Dev», der die Softwareentwickler (Developers) repräsentiert, und «Ops», der für den IT-Betrieb (Operations) steht. Die Kombination zum gemeinsamen «DevOps» symbolisiert hiermit einen Schulterschluss zwischen Entwicklung und IT-Betrieb. Ein Zusammenrücken der beiden in der traditionellen Wahrnehmung grundverschiedenen Bereiche Softwareentwicklung und IT-Betrieb steht im Vordergrund. (Quelle: Java Magazin, die DevOps Bewegung).
Alle sind mitverantwortlich für den Erfolg
Während bei Continous Delivery mehr die Toolchain und der Prozess von der Entwicklung bis zum Deployment im Betrieb im Vordergrund stehen, ist DevOps mehr eine kulturelle Angelegenheit. DevOps schreibt keine Prozesse oder Tools vor, die Zusammenarbeit zwischen Entwicklung und Betrieb steht im Vordergrund.
DevOps postuliert die Zusammenarbeit von der Entwicklung, dem Testen bis zum Betrieb. Ein Softwareentwickler ist damit auch für den Betrieb mitverantwortlich, ein Betreiber ist auch in der Entwicklung involviert. Diese Zusammenarbeit dient einem gemeinsamen Verständnis für beide Seiten.
Prinzipien von DevOps sind:
• Alle sind mitverantwortlich für den Erfolg, sprich der Umsetzung der Anforderungen, es gibt kein «die Entwickler haben schlecht entwickelt», kein «der Betrieb hat keine Ahnung, wie die Anwendung gepflegt werden muss».
• Eine Fehlerkultur ist die Grundlage für eine ständige Verbesserung und Optimierung der Zusammenarbeit. DevOps muss gelernt werden, eine Kulturveränderung ist Voraussetzung.
• Der Betrieb und die Entwicklung fokussieren sich auf den Nutzenbeitrag für das Business, Ziel ist der gemeinsame Erfolg.
Grundsätze von ITIL wanken
Für die Entwickler bedeutet dies insbesondere, dass sie nicht nur für Bereitstellung des Codes bis zum Testen verantwortlich sind, sie sind verantwortlich bis und mit Deployment. Der Betrieb muss wiederum in der Entwicklung beteiligt sein, dies benötigt zusätzliche Fähigkeiten wie Code lesen und verstehen. Durch DevOps wird damit ein durchgängiges Verständnis von Entwicklung bis zum Betrieb einer Anwendung oder Infrastruktur geschaffen.
Die zum Teil von ITIL postulierten Grundsätze (Entwickler entwickeln, Betreiber betreiben) kommen ins Wanken, jedoch ist zu beachten, dass Change- und Incidentprozesse weiterhin nötig bleiben, zudem ist davon auszugehen, dass hybride Ansätze (konventioneller Betrieb und DevOps, bzw. Continous Delivery) nebeneinander Platz haben und in ein Gesamtframework integriert werden müssen. Bis anhin gibt es dazu jedoch noch keine Standards.
Eyup Koç ist Mitglied der swissICT-Fachgruppe «Sourcing & Cloud» und Senior Consultant Cloud Enablement & Consulting bei Swisscom