Kontinuierliche Lieferung
Table of Contents
Was ist Continuous Delivery?
Continuous Delivery ist der Softwareentwicklungsprozess, bei dem Codeänderungen schnell, sicher und mit höherer Qualität in die Produktion gebracht werden, in der Regel mithilfe von Tools zur Automatisierung der Deployments. Ingenieurteams nehmen Änderungen an ihrer Software in kurzen Zyklen vor, damit sie häufiger getestet und veröffentlicht werden kann. Dieser Ansatz ermöglicht schrittweise Änderungen mit geringeren Kosten und Risiken. Der Ansatz wurde erstmals von Jez Humble und David Farley in ihrem Buch Continuous Delivery bekannt gemacht : Reliable Software Releases Through Build, Test, and Deployment Automation.
Wie funktioniert Continuous Delivery?
Hier ist eine Übersicht über den Prozess der kontinuierlichen Bereitstellung:
- Kontinuierliche Integration (CI): Teams integrieren Codeänderungen regelmäßig in ein gemeinsames Repository. Für diese Änderungen werden automatisierte Tests durchgeführt, um sicherzustellen, dass die Codebasis funktionsfähig bleibt.
- Automatisierte Builds: Immer wenn neuer Code übertragen wird, startet ein automatischer Build-Prozess, der den Code kompiliert und ausführbare Artefakte erstellt.
- Automatisierte Tests: Automatisierte Tests (Unit-Tests, Integrationstests usw.) überprüfen die Funktionalität des Codes. Wenn die Tests erfolgreich sind, wird der Code weiterentwickelt.
- Bereitstellungspipeline: Der Code, der die Tests bestanden hat, durchläuft eine Bereitstellungspipeline. Diese Pipeline besteht aus Stufen wie Staging, Testing und Production.
- Automatisiertes Deployment: Wenn Codeänderungen alle Phasen durchlaufen haben, werden sie automatisch in die Produktion oder eine produktionsähnliche Umgebung übertragen.
Warum du sowohl Continuous Delivery als auch A/B-Testing brauchst
Continuous Delivery sorgt für eine effiziente Softwarebereitstellung, während A/B-Tests die Änderungen validieren und sicherstellen, dass sie den Bedürfnissen der Nutzer/innen entsprechen. Die Integration beider Methoden ermöglicht eine qualitativ hochwertige Software, die auf dem Feedback der Nutzer und den Erkenntnissen der Daten basiert.
Qualitätssicherung
CD liefert Aktualisierungen schnell, während A/B-Tests die Änderungen anhand echter Nutzerdaten validieren und so für eine effektive Bereitstellung sorgen, die das Benutzererlebnis verbessert. Die Updates kommen nicht nur schnell, sondern sind auch optimiert.
Verbesserung
A/B-Tests ermöglichen es den Teams, die von der CD bereitgestellten Funktionen auf der Grundlage des Nutzerfeedbacks schrittweise zu verbessern, was zu leistungsfähigeren Produkten führt.
Datengesteuerte Entscheidungen
Durch die Integration von A/B-Tests in CD können frühzeitig Erkenntnisse gewonnen werden, die bei der Priorisierung von Funktionen und bei Entscheidungen über die Bereitstellung von Produkten helfen.
Vorteile von Continuous Delivery
Nachfolgend sind die wichtigsten Vorteile einer Continuous Delivery Pipeline in der Cloud aufgeführt.
Schnelligkeit auf dem Markt
Die Marktbedingungen ändern sich ständig, da sich das Verbraucherverhalten ändert. Produkte können sich plötzlich durchsetzen oder ebenso plötzlich an Bedeutung verlieren. Gleichzeitig kann der technologische Fortschritt auch dazu führen, dass du Änderungen schneller an deine Endnutzer/innen weitergeben musst. Um auf unvorhersehbare Veränderungen auf dem Markt und in der Technik zu reagieren, ist es für Ingenieure schneller, Software mit Continuous Delivery zu veröffentlichen.
Geringeres Risiko
Wenn inkrementelle Änderungen häufiger veröffentlicht werden, können Fehler früher im Entwicklungsprozess erkannt und korrigiert werden. Außerdem ist es einfacher, kleinere Änderungen bei Bedarf wieder rückgängig zu machen, und die Versionskontrolle und die Verwendung einer Staging-Umgebung verhindern, dass unbeabsichtigte Änderungen in die Produktionsumgebung gelangen. Der Einsatz automatisierter Tests und die Aufteilung von Tests in kleinere Einheiten sind weitere Erfolgsmethoden(n) von DevOps, die Ausfallzeiten reduzieren.
Koordinierung und Kommunikation zwischen den Teams
Bei der kontinuierlichen Bereitstellung teilen sich die Teams die Verantwortung für die Softwarebereitstellung. Dadurch werden die Silos zwischen Gruppen oder Abteilungen aufgebrochen und die Unvorhersehbarkeit und der Stress bei der Veröffentlichung von Software beseitigt. Häufigere Releases sorgen dafür, dass das Team in einem regelmäßigen, vorhersehbaren Rhythmus arbeitet.
Schnellerer Lernzyklus
Wenn du neue Funktionen schneller auf den Markt bringst, bekommst du auch schneller Feedback von deinen Kunden. Dieser Prozess ermöglicht es dir, von deinen Kunden zu lernen, indem du ihnen früher eine funktionierende Software zur Verfügung stellst, ihr Feedback einbeziehst und Anpassungen an deinem Produkt vornimmst, um es zu verbessern.
Beispiel für Continuous Delivery
Stell dir eine E-Commerce-Plattform vor, die mit einem neuen Checkout-Flow experimentieren möchte, um die Konversionsraten zu verbessern.
- Ideenfindung: Identifiziere den Bedarf für einen neuen Checkout-Flow, um die Konversionsraten zu verbessern.
- Entwicklung: Erstelle zwei Checkout-Versionen. A (aktueller Ablauf) und B (neuer optimierter Ablauf)
- CI und Bereitstellung: Teste beide Versionen in einer Staging-Umgebung über Continuous Integration.
- A/B-Testing: Verwende Feature-Toggles, um Nutzer/innen nach dem Zufallsprinzip zu Version A oder B zu leiten.
- Datenerfassung: Verfolge die Nutzerkennzahlen (Konversionsraten, Abbrüche) in beiden Versionen.
- Analyse: Vergleiche die Leistungskennzahlen, um den leistungsfähigeren Checkout-Flow zu ermitteln.
- Einführung: Wenn Version B besser abschneidet, führe sie plattformweit per CD ein.
- Überwachung: Überprüfe und verbessere den neuen Ablauf kontinuierlich anhand von Nutzerfeedback und Daten.
Kontinuierliche Bereitstellung und DevOps
Der Begriff "DevOps" setzt sich aus "Development" (Entwicklung) und "Operations" (Betrieb) zusammen und bezeichnet die Zusammenarbeit zwischen diesen beiden Bereichen. DevOps hat gemeinsame Ziele und Eigenschaften mit Continuous Delivery. Beide liefern kleine Änderungen, setzen auf die Zusammenarbeit und Koordination zwischen den Teams und haben das gemeinsame Ziel, die Time-to-Market zu verkürzen.
Um den Unterschied zwischen den beiden zu verdeutlichen: DevOps ist die Methode, mit der Unternehmen Software entwickeln und veröffentlichen. Es ist die Praxis, die die Zusammenarbeit und Koordination zwischen den Softwareentwicklern und anderen Abteilungen im Unternehmen betont. DevOps schafft eine Umgebung, in der Software schnell und zuverlässig entwickelt, getestet und veröffentlicht werden kann.
Du kannst dir DevOps als die größere Kraft und Philosophie hinter dem Service vorstellen, während Continuous Delivery der Prozess ist, der ihn in der Cloud bereitstellt.
Kontinuierliche Bereitstellung vs. kontinuierliche Integration
Bei der traditionellen Softwareentwicklung findet der Integrationsprozess am Ende eines Projekts statt, nachdem alle Beteiligten ihre Arbeit beendet haben. Dieser Prozess kann viel Zeit in Anspruch nehmen und für alle Beteiligten frustrierend sein.
Bei der kontinuierlichen Integration handelt es sich um eine Praxis der Softwareentwicklung, die die Integrationsphase in den Entwicklungszyklus vorverlegt, so dass die Entwicklung, das Testen und die Integration des Codes in kürzeren Abständen erfolgen. Das Entwicklungsteam führt Codeänderungen mehrmals täglich in ein gemeinsames, zentrales Repository ein, um jederzeit eine Produktversion veröffentlichen zu können. Dies erfordert einen Integrationsprozess, der reproduzierbar und automatisiert ist.
Kontinuierliche Bereitstellung vs. kontinuierliches Deployment
Bei der kontinuierlichen Bereitstellung werden alle Softwareänderungen, die die Tests bestehen, automatisch in die Produktion übernommen. Um eine kontinuierliche Deployment-Pipeline zu erstellen, muss dein Unternehmen zuerst zur kontinuierlichen Bereitstellung übergehen.
Continuous Deployment kann als Erweiterung von Continuous Integration betrachtet werden, mit dem Ziel, die Zeitspanne zwischen dem Schreiben neuen Codes und der Verwendung des neuen Codes in der Produktionscodebasis zu minimieren.
Um eine kontinuierliche Bereitstellung zu erreichen, verlässt sich das Entwicklungsteam auf einen strengen Prozess, der die verschiedenen Schritte bis zur Bereitstellung automatisiert. Nachdem jede Integration die Release-Kriterien erfüllt hat, wird die Live-Anwendung mit dem neuen Code aktualisiert und kann in Betrieb genommen werden.
Agile Entwicklung und kontinuierliche Bereitstellung
Die agile Softwareentwicklung beruht auf einer Reihe von Werten und Prinzipien, bei denen Anforderungen und Lösungen durch die Zusammenarbeit im Team entwickelt werden. Sie umfasst eine adaptive Planung, eine frühzeitige Bereitstellung, kontinuierliche Verbesserungen und eine flexible Reaktion auf Veränderungen. Bei der agilen Softwareentwicklung gibt es keinen festen Zeitrahmen für jede Veröffentlichung, aber die Idee ist, dass sie häufig stattfindet: vielleicht alle paar Wochen oder alle paar Monate, wobei die kürzere der beiden Varianten bevorzugt wird.
In der Entwicklung der Prozesse für die Softwarebereitstellung ging die agile Entwicklung der kontinuierlichen Bereitstellung voraus.
Continuous Delivery ist eine Unterform von Agile, bei der das Team seine Software während der Entwicklung jederzeit zur Veröffentlichung bereithält. Es geht vielmehr darum, so zu entwickeln, dass die Software immer bereit für die Veröffentlichung ist - kontinuierlich.
Kontinuierliche Bereitstellung & A/B-Testing
Experimente und Feature Management müssen Hand in Hand arbeiten. Experimente sind eine wichtige Möglichkeit für dein Unternehmen, Ideen zu validieren, bevor du neue Produkte, Funktionen und Erlebnisse für alle Besucher/innen einführst. Bei Entwicklungsteams, die mit kontinuierlicher Integration und kontinuierlicher Bereitstellung arbeiten, können Feature Flags, die die Einführung neuer Erlebnisse steuern, das Risiko verringern, dass etwas Unerprobtes für alle gleichzeitig eingeführt wird.
Damit A/B-Tests ein wichtiger Bestandteil des Bereitstellungsprozesses deines Unternehmens bleiben, integriert Optimizely serverseitige Experimente mit Feature Flags, Rollouts und Variablen, sodass du den gesamten Lebenszyklus der Produktentwicklung an einer Stelle kontrollieren kannst. Indem du zunächst einen A/B-Test mit einem Teil des Datenverkehrs durchführst, kann dein Team eine neue Funktion testen und schrittweise optimieren. Wenn du das beste Benutzererlebnis gefunden hast, kannst du es kontrolliert auf deinen gesamten Kundenstamm ausweiten, um das Risiko technischer Probleme bei der Veröffentlichung zu verringern.