DevOps: Optimierte Zusammenarbeit von Entwicklung und Betrieb

DevOps ist die Prozessverbesserung der Zusammenarbeit zwischen Devs und Ops mit dem Ziel einer schnelleren und weniger fehlerbehafteten Softwareauslieferung. Die Qualität der ausgelieferten Software ist hierbei höher, denn die beteiligten Teams, die spezifischen Werkzeuge und die Infrastruktur sind hierbei optimal aufeinander abgestimmt. Ebenso steigt die Geschwindigkeit der Auslieferung und die Mean Time To Recover (MTTR) sinkt. Das Fullstack-Angebot im Sinne des Betriebes von evodion wird durch eine Gruppe von DevOps-Interessierten abgerundet.

Die Geschichte von DevOps

Auf der „Agile Conference 2008“ in Toronto, Kanada, haben Andrew Shafer und Patrick Debois den Begriff „Agile Infrastructure“ diskutiert. Der Begriff „DevOps“ wurde danach durch eine Serie von DevOpsDays ab 2009 (gestartet in Belgien) bekannt. Seit damals gibt es DevOpsDays in vielen Ländern weltweit und der Begriff DevOps wurde immer bekannter.

Was ist DevOps nicht?

Es ist kein Produkt das man kaufen und installieren kann, eine Berufsbezeichnung, jemand der sich mit Jenkins, Technologie Docker und Container Orchestrator Kubernetes auskennt oder eine Zusatzqualifikation eines Devs (Entwickler) oder eines Ops (Operator).

What Is DevOps?

"DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.

You cannot buy DevOps and install it. DevOps is not just automation or infrastructure as code. DevOps is people following a process enabled by products to deliver value to end users."
(Donovan Brown, Microsoft DevOps Program Manager)

Was ist DevOps

DevOps ist ein Prozess, eine Kultur, welche auf dem gemeinsamen Verständnis aufbaut, wie Software entwickelt und schnell in Produktion gebracht wird. Es ist sowohl die Weiterentwicklung des Agilen Gedankens in Bezug auf Infrastruktur und Deployment, als auch die Annäherung von Entwicklern und Ops. Devs lernen wie SW deployed wird, Ops lernen wie Infrastruktur via SCM versionierbar gemacht wird (Source Code für Infrastruktur). Devs lernen was es heißt eine Software in Produktion zu betreiben. Hierzu sollte alles was automatisierbar ist auch automatisiert werden. Nur so kann jederzeit das Produkt ohne Schmerzen in der Produktion deployed werden.

Vom agilen Manifest zu DevOps

Wir erschließen bessere Wege, Software zu entwickeln, indem wir es selbst tun und anderen dabei helfen. Durch diese Tätigkeit haben wir die folgenden Werte zu schätzen gelernt:

● Individuen und Interaktionen mehr als Prozesse und Werkzeuge
● Funktionierende Software mehr als umfassende Dokumentation
● Zusammenarbeit mit dem Kunden mehr als Vertragsverhandlung
● Reagieren auf Veränderung mehr als das Befolgen eines Plans

Das heißt, obwohl wir die Werte auf der rechten Seite wichtig finden, schätzen wir die Werte auf der linken Seite höher ein.

4 Prinzipien des Agilen Manifests die zu DevOps passen
● Unsere höchste Priorität ist es, den Kunden durch frühe und kontinuierliche Auslieferung wertvoller Software zufrieden zu stellen.
● Regelmäßige Lieferung funktionierender Software innerhalb weniger Wochen oder Monate, bevorzugt in kürzeren Zeitspannen.
● Tägliche Zusammenarbeit von Fachexperten und Entwickler während des Projektes.
● Funktionierende Software ist das wichtigste Fortschrittsmaß.

Vorteile von DevOps

● Verbesserung der Zusammenarbeit und Kommunikation zwischen den Abteilungen Entwicklung und Betrieb
● Gemeinsamer Lernprozess: Die Devs lernen von den Ops und umgekehrt
● Gemeinsamer Fokus: Das Produkt und der Kunde
● Beschleunigte Lieferung der Software zum Kunden, und das in einer besseren Qualität
● Verkürzte Durchlaufzeit (lead time: code commit -> running in production)
Studien von puppet labs /puppet.com belegen, dass Firmen die nach DevOps arbeiten bis zu 60x weniger Fehler produzieren und dass sie bei Fehlern bis zu 168-fach schneller eine Wiederherstellung erreichen konnten. Weiterhin können diese Firmen mit 30-facher Geschwindigkeit deployen (ausrollen) und das mit 200 mal kürzeren Durchlaufzeiten (Zeit zwischen Source Code Check in und Ausrollen in Produktion).

Die 7 DevOps Praktiken:

● Configuration Management - Konfiguration als versionierbarer Source Code
● Release Management - Was wird wie und wo deployed
● Continuous Integration (CI) - siehe unten
● Continuous Deployment (CD) - siehe unten
● Infrastructure as Code - die Beschreibung der Infrastruktur liegt als ausführbarer und versionierbarer Source Code vor
● Test Automation - nach jedem Code Commit werden die Unit Tests ausgeführt, alle anderen Tests werden ebenfalls automatisiert ausgeführt
● Application Performance Monitoring (APM) - Probleme identifizieren bevor der Kunde es merkt

Continuous Integration (CI)

Jeder Source Code Commit startet den Build des Gesamtsystems sowie die zugehörigen Unit Tests. Hierdurch gibt es ein schnelles Feedback an die Entwickler, ob der Build noch funktioniert. Durch das häufige Committen wird auch vermieden, dass ein Branch sich zu sehr vom Master Branch entfernt und es dadurch immer schwieriger wird ihn zu mergen.

Continuous Delivery (CD)

Hierbei geht es darum, Software in kurzen Zyklen zu produzieren um jederzeit zuverlässig releasen zu können. Das bedeutet Software schneller und öfter zu bauen, zu testen und auszuliefern. Ganz wesentlich hierfür ist eine automatisierte Deployment Pipeline. Dies macht es deutlich einfacher die Software in Produktion auszuliefern.

Continuous Deployment (CD)

Hierunter wird üblicherweise verstanden, dass in einer Continuous Delivery Pipeline das Software Artefakt ohne manuellen Eingriff bis in die Produktions Stage deployed wird. Dabei wird häufig mit Features Toggles gearbeitet, damit keine unfertigen Features für den Kunden sichtbar sind. Trotz alledem ist der aktuelle Source Code in der Produktion deployed aber er ist nicht released!

Tools

Es gibt sicherlich mehr als 100 Tools denen man das Attribut DevOps anheften könnte. Diese Tools werden aber bei der Beschreibung von DevOps zu sehr in den Vordergrund gestellt. Trotzdem möchte ich ein paar Tools nennen, da ohne sie DevOps nur schwer vorstellbar ist:
Jenkins oder ein anderes Build/CI/CD Tool
Docker da die Containerisierung im Mainstream angekommen ist
Kubernetes da die Entscheidung bzgl. Orchestrierung entschieden ist
● Die großen Cloud Provider AWS, GCP, Azure
● Hybride Clouds - z.B. AWS plus eigenes Metall oder AWS plus Azure
Die Zukunft wird Cloud agnostisch! Es fehlen aber noch Tools die uns hierbei unterstützen. Eine mögliche Lösung ist z.B. Pulumi.

Fazit

DevOps ist kein Hype. DevOps ist vielmehr die logische Fortführung des agilen Gedankens in Bezug auf Infrastruktur und Deployment.

Lesenswert

The Phoenix Project: A Novel about IT, DevOps and Helping Your Business Win by Gene Kim, Kevin Behr, George Spafford.

Links

https://www.ibm.com/developerworks/library/d-devops-continuous-innovation/index.html

https://vmsec.wordpress.com/2017/09/08/pdca-and-devops/

Andreas Lüdtke