Die acht Phasen einer DevOps-Pipeline

Kunden haben die Erwartung, dass sich Software schnell ihren Bedürfnissen anpasst. Lange sind die Zeiten vorbei, in denen Softwareprodukte Jahre für die Entwicklung bis zum Release benötigten. Neue Anforderungen sollen in kurzer Zeit marktreif umgesetzt werden. Agile und flexible Software Entwicklung führt zu einem großen Wettbewerbsvorteil. Um dem Bedarf nach kontinuierlicher Weiterentwicklung und kurzfristigen Updates gerecht zu werden, setzen wir auf effektive DevOps Pipelines. Unser Beitrag zur Digtalisierung: In dynamischen Märkten sichert die konsequente Automatisierung von Arbeitsabläufen eine entscheidenden Vorsprung und entlastet Mitarbeiter.

Eine DevOps Pipeline beschreibt verschiedene Phasen. Neue Software durchläuft alle Phasen der Pipeline. Ziel ist es Arbeitsabläufe organisiert und fokussiert zu halten. Die DevOps Pipeline kann nach Anforderungen einzelne Phasen auslassen oder um weiter Phasen ergänzt werden. Dabei werden die verschiedene Anforderungen des Teams berücksichtigt. Es entsteht ein Vorgehen, das eine einheitliche Terminologie verwendet und innerhalb der Organisation durch Konsistenz das gleiche Verständnis der Prozesse fördert. Innerhalb der Pipeline werden die einzelnen Schritte konsequent automatisiert. Dieser Artikel beschreibt eine achtstufige DevOps-Pipeline und erklärt Begriffe, die üblicherweise im Zusammenhang mit DevOps verwendet werden.

 

Die acht Phasen einer DevOps-Pipeline sind im Bild als DevOps-infinity-loop dargestellt.

Im Folgenden wird genauer auf die einzelnen Phasen eingegangen.

 

Plan

Die Planungsphase umfasst alles was passiert, bevor die Entwickler anfangen Code zu schreiben. Hier sind Produkt- oder Projektmanager gefragt. Anforderungen und Feedback werden von Stakeholdern und Kunden gesammelt und zur Erstellung einer Produkt-Roadmap verwendet. Die Produkt Roadmap kann mit einer Vielzahl von Tools geplant, dokumentiert und nachverfolgt werden um u.a. den Projektfortschritt, Probleme und Meilensteine aufzuzeigen. Etablierte Tools sind z.B. Jira, Azure DevOps, oder Asana. Aus der Roadmap können Epics, User Stories und Features abgeleitet werden. Dadurch entsteht ein Backlog mit Aufgaben, das die Anforderungen von Stakeholdern und Kunden enthält. Die Aufgaben im Backlog werden verwendet, um Sprints im Team zu planen und mit der Entwicklung zu beginnen.

Code

Das Entwicklungsteam kann mit dem ersten Sprint starten, sobald die enthaltenden Epics, User Stories und Features vorbereitet sind. Das Sprint Planning und Sprint Review Meeting unterstützt den Austausch in jedem Sprint. Parallel zum Sprint kann die Roadmap ergänzt und das Backlog überarbeitet werden. Frühes Feedback von den Stakeholdern und Kunden kann bereits im folgenden Sprint berücksichtigt werden.

Ergänzend zum Toolkit eines Softwareentwicklers hat das Team einen Satz von Plugins in ihren Entwicklungsumgebungen installiert, die den Entwicklungsprozess zu unterstützen. Dazu gehört die automatische Überprüfung von konsistenten Code Styles, das aufzeigen von Sicherheitslücken und melden von Code-Anti-Patterns. Die Plugins erleichtern die Zusammenarbeit und führen zu einer einheitlichen Codebasis mit gemeinsamen Standards. Weitere Plugins bieten Unterstützung zur Durchführung von Tests und Überwachung von CI / CD Pipelines. Fehlgeschlagene Tests und Builds werden unmittelbar bemerkt.

Build

Sobald ein Entwickler eine Aufgabe abgeschlossen hat, lädt er seinen Code in ein gemeinsames Sourcecode Repository und erstellt einen Pull Request. Ein anderer Entwickler überprüft die vorgenommenen Änderungen. Die manuelle Überprüfung ist schnell und leichtgewichtig und hilft Probleme effektiv und früh zu erkennen. Sobald der Review erfolgreich abgeschlossen ist, wird der Pull Request akzeptiert.
Das Akzeptieren startet eine CI/CD Pipeline, die die Codebasis baut und eine Reihe von Unit-, Integrations- und End to End-Tests durchführt, um alle Regressionen zu identifizieren. Durch die kontinuierliche Überprüfung von Code-Änderungen in einem gemeinsam genutzten Repository können durch die Ausführung von Builds und Tests Integrationsprobleme minimiert werden, die bei der Arbeit an einer gemeinsam genutzten Codebasis auftreten. So können Fehler frühzeitig im Entwicklungslebenszyklus aufdeckt werden.

Test

Sobald ein Build erfolgreich war, wird er automatisch in einer Staging-Umgebung bereitgestellt. Bei der Staging-Umgebung kann es sich um vorhandene Systeme handeln oder um eine neue Umgebung, die im Rahmen des Bereitstellungsprozesses automatisch erstellt wird. Die Bereitstellung einer neuen Umgebung zum Zeitpunkt des Builds verwendet Infrastructure-as-Code (IaC) als Basis und ist ein Kernbestandteil vieler DevOps-Pipelines.

Sobald eine Anwendung in der Staging-Umgebung bereitgestellt ist, werden eine Reihe von automatischen und manuellen Tests durchgeführt. Dazu zählen automatische Performance- und UI-Tests der Benutzeroberfläche. Zu den manuellen Tests zählen Akzeptanztests der Softwaretester und  User Acceptance Tests (UAT) der Benutzer, die die Anwendung verwenden. Dadurch findet eine Qualitätssicherung statt und es können Probleme und Verbesserungsmöglichkeiten aufgezeigt werden. Umfang und Art der Tests können variieren und unterschiedliche Schwerpunkte je nach Anwendung und Einsatzgebiet setzen. Diese Phase ermöglicht ausführliche Tests ohne die Arbeit der Entwickelnden zu unterbrechen oder die Produktionsumgebung zu beeinflussen.

Release

Mit einem Release steht eine Anwendungsversion bereit, die für den Einsatz in der Produktionsumgebung vorgesehen ist. Zu diesem Zeitpunkt hat jede Codeänderung eine Reihe von automatischen und manuellen Tests durchlaufen. Neben neuen Funktionen sind auch die nicht funktionale Anforderungen integraler Bestandteil. Dazu gehört das Update von Anwendungskomponenten wie Software Bibliotheken und Schnittstellen. Ebenso zählen hierzu Updates von Komponenten aus der Betriebsumgebung wie Applikationsserver und Laufzeitumgebungen. Ein Release in der DevOps Pipeline umfasst alle benötigten Abhängigkeiten und Voraussetzungen für den Betrieb einer Anwendung. Dies beinhaltet Bugfixes und Security Updates der beteiligten Komponenten. Die Bereitstellung von Anwendungen in Containern bietet entscheidende Vorteile hinsichtlich Stabilität, Verfügbarkeit, Sicherheit und Geschwindigkeit von Updates.

Deploy

DevOps setzt bei dem Deployment von Anwendungen in der Produktionsumgebung auf Zero-Downtime-Deployments oder sehr kurze Ausfallzeiten. In Data Center Umgebungen kommen regelmäßig Blue-Green-Deployments zum Einsatz. Produktions- und Testumgebung werden gleich aufgebaut und sind damit austauschbar. Auf dem bisherigen Testsystem wird das neue Release bereitgestellt. Die Produktionsumgebung wird ohne Unterbrechung auf das Testsystem umgestellt. Aus dem Testsystem wird die Produktionsumgebung. Die bisherige Produktionsumgebung bleibt bestehen. Bei schwerwiegenden Fehlern steht sie weiterhin zur Verfügung und kann notfalls zum Zurücknehmen des Releases eingesetzt werden.

In Cloud native Umgebungen mit Microservices und Containern können einzelne Services ohne Unterbrechung auf ein neues Release umgestellt werden. Das Release wird in neuen Pods bereitgestellt, die die benötigten Software Container enthalten. Mit Infrastructure-as-Code (IaC) als Basis kann die Bereitstellung weitgehend automatisiert erfolgen. Erst wenn die neuen Pods zur Verfügung stehen, erfolgt die unterbrechungsfreie Umstellung des Service. Bei schwerwiegenden Fehlern kann der Service notfalls auf die vorherigen Pods zurückgestellt werden. Paralleler Betrieb und der einfache Wechsel zwischen verschiedenen Releases bieten dabei maximale Flexibilität.

Eine automatisierte Continuous Delivery Pipeline unterstützt das Deployment. Releases und Updates werden zu reproduzierbaren und einfachen Aufgaben, die innerhalb kürzester Zeit planbar und durchführbar sind.

Operate

In einem crossfunktionalen DevOps Team hat der Betrieb der Produktionsumgebung hohe Priorität. Das Team arbeitet gemeinsam an dem Ziel IT Services in hoher Qualität bereitzustellen. Dazu werden Service Level Objectives (SLOs) vereinbart, die die erwartete Verfügbarkeit und Performance des Systems beschreiben.

Wenn die SLOs eingehalten werden, konzentriert sich das Team auf die Weiterentwicklung und Verbesserung der Anwendungen. Werden die SLOs nicht erreicht, wechselt der Fokus auf die Behebung von Störungen und Stabilisierung des Betriebs.

Die Betriebsumgebung wird skalierbar aufgesetzt um geänderte Anforderungen der Applikation abbilden zu können. Ebenso kann auf eine geänderte Anzahl an Nutzern, ein anderes Nutzerverhalten und Lastspitzen reagiert werden. Die Erfahrungen und neue Erkenntnisse aus dem Betrieb fließen stetig in die weitere Entwicklung ein.

Monitor

Innerhalb der DevOps Pipeline ist das kontinuierliche Monitoring der Produktionsumgebung ein wichtiger Erfolgsfaktor. Durch die Auswertung von Betriebsdaten wird die Sicherheit, Performance und Verfügbarkeit der Umgebung überprüft. Die gesammelten Daten werden dazu verwendet die bestehenden Applikationen zu verbessern und Auffälligkeiten im Betrieb frühzeitig zu erkennen, um Beeinträchtigungen für die bereitgestellten IT Services zu vermeiden. In Umgebungen mit Microservices und Software Containern spielt die Zusammenführung und zentrale Auswertung von Log- und Protokolldateien eine wichtige Rolle. Informationsdaten werden dabei einheitlich erfasst und zur Analyse in Datenbanken gespeichert.

Die Überwachung des Betriebs erfolgt durch die Definition von Schwellwerten und Metriken, die einen normalen Betrieb kennzeichnen. Außergewöhnliche Betriebsdaten ungewöhnliche Ressourcennutzung führen dabei zu einer Alarmierung des DeoOps Teams, um bei Bedarf manuell eingreifen zu können.

DevOps-infinity-loop

Im Data Center, in der Cloud und auf Container Plattformen wie Kubernetes bietet die DevOps-Pipeline entscheidene Vorteile. Mit dem DevOps-infinity-loop werden Continuous Integration und Continuous Delivery konsequent weiterentwickelt. Mit dem gemeinsamen Ziel optimale IT Services zu liefern, schafft ein crossfunktionales DevOps Team kontinuierliche und agile Wertschöpfung.

 

DevOps umfasst Ansätze, wie eine Idee von der Entwicklung bis zum Einsatz in der Produktivumgebung beschleunigt werden kann, um dort zur Wertschöpfung beizutragen. Diese Ansätze erfordern eine regelmäßige Kommunikation zwischen Entwicklungs- und Operations-Teams sowie eine gute Zusammenarbeit.

Weiterführende Informationen

Bleiben Sie auf dem Laufenden

Sie möchten mehr zum Thema erfahren?

Ich stehe Ihnen gern für weitere Fragen zur Verfügung.