Continuous Delivery
Inhalt
Was ist Continuous Delivery?
Continuous Delivery (CD) 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, so dass sie häufiger getestet und freigegeben 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?
Im Folgenden finden Sie eine Aufschlüsselung des Continuous Delivery-Prozesses:
- Kontinuierliche Integration (CI): Teams integrieren häufig Codeänderungen 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 automatisierter Build-Prozess, der den Code kompiliert und ausführbare Artefakte erstellt.
- Automatisierte Tests: Automatisierte Tests (Unit-Tests, Integrationstests usw.) validieren die Funktionalität des Codes. Wenn die Tests erfolgreich sind, wird der Code weiterentwickelt.
- Bereitstellungs-Pipeline: Der Code, der die Tests bestanden hat, durchläuft eine Bereitstellungspipeline. Diese Pipeline besteht aus Stufen wie Staging, Testen und Produktion.
- Automatisierte Bereitstellung: Wenn Codeänderungen alle Phasen durchlaufen haben, werden sie automatisch in der Produktion oder einer produktionsähnlichen Umgebung bereitgestellt.
Warum Sie sowohl Continuous Delivery als auch A/B-Testing brauchen
Continuous Delivery gewährleistet eine effiziente Softwarebereitstellung, während A/B-Testing die Änderungen validiert und sicherstellt, dass sie den Anforderungen der Benutzer entsprechen. Die Integration von beidem ermöglicht eine qualitativ hochwertige Software, die auf dem Feedback der Benutzer und den Erkenntnissen der Daten basiert.
-
Qualitätssicherung
CD liefert Aktualisierungen schnell, während A/B-Testing die Änderungen anhand echter Benutzerdaten validiert und so für eine effektive Bereitstellung sorgt, die das Erlebnis der Benutzer verbessert. Updates werden nicht nur schnell bereitgestellt, sondern auch optimiert. -
Verbesserung
A/B-Testing ermöglicht es den Teams, die von CD bereitgestellten Funktionen auf der Grundlage von Benutzerfeedback schrittweise zu verfeinern, was zu leistungsfähigeren Produkten führt. -
Datengesteuerte Entscheidungen
Durch die Integration von A/B-Tests in CD werden frühzeitig Erkenntnisse gewonnen, die bei der Priorisierung von Funktionen und bei Entscheidungen über die Bereitstellung von Produkten hilfreich sind.
Vorteile von Continuous Delivery
Im Folgenden finden Sie die wichtigsten Vorteile einer Continuous Delivery-Pipeline in der Cloud.
-
Schnelligkeit auf dem Markt
Die Marktbedingungen sind einem ständigen Wandel unterworfen, da sich das Verbraucherverhalten ändert. Produkte können sich plötzlich durchsetzen oder, ebenso plötzlich, wieder verschwinden. Gleichzeitig kann der technologische Fortschritt auch dazu führen, dass Sie Änderungen schneller an Ihre Endbenutzer weitergeben müssen. Um auf unvorhersehbare Veränderungen des Marktes und 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 durch die Versionskontrolle und die Verwendung einer Staging-Umgebung wird verhindert, dass unbeabsichtigte Änderungen in die Produktionsumgebung gelangen. Der Einsatz automatisierter Tests und die Aufteilung von Tests in kleinere Unit-Tests sind weitere Erfolgsmethoden von DevOps, die Ausfallzeiten reduzieren. -
Koordinierung und Kommunikation zwischen den Teams
Bei Continuous Delivery 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. Die Bereitstellung häufigerer Releases ist ein Prozess, der das Team dazu bringt, in einem regelmäßigen, vorhersehbaren Tempo zu arbeiten. -
Schnellerer Lernzyklus
Wenn Sie neue Funktionen schneller auf den Markt bringen, erhalten Sie auch schnelleres Feedback von Ihren Kunden. Dieser Prozess ermöglicht es Ihnen, von Ihren Kunden zu lernen, indem Sie ihnen früher funktionierende Software in die Hand geben, ihr Feedback einbeziehen und Anpassungen an Ihrem Produkt vornehmen, um es zu verbessern.
Beispiel für Continuous Delivery
Stellen Sie sich eine E-Commerce-Plattform vor, die mit einem neuen Checkout-Verfahren experimentieren möchte, um die Conversion Rates zu verbessern.
- Ideenfindung: Identifizieren Sie den Bedarf an einem neuen Checkout, um die Conversions zu verbessern.
- Entwicklung: Erstellen Sie zwei Checkout-Versionen. A (aktueller Ablauf) und B (neuer optimierter Ablauf)
- CI und Bereitstellung: Testen Sie beide Versionen in einer Staging-Umgebung über kontinuierliche Integration.
- A/B-Testing: Verwenden Sie Feature Toggles, um Benutzer nach dem Zufallsprinzip zu Version A oder B zu leiten.
- Datenerfassung: Verfolgen Sie die Benutzerkennzahlen (Conversion Rates, Abbrüche) in beiden Versionen.
- Analyse: Vergleichen Sie die Leistungskennzahlen, um den Checkout-Flow zu ermitteln, der besser abschneidet.
- Bereitstellung: Wenn Version B besser abschneidet, stellen Sie sie per CD plattformweit bereit.
- Überwachung: Überwachen und verfeinern Sie den neuen Ablauf kontinuierlich auf der Grundlage von Benutzerfeedback und Daten.
Continuous Delivery & DevOps (kontinuierliche Bereitstellung)
Der Begriff 'DevOps' ist eine Kombination aus 'Entwicklung' und 'Betrieb' und bezeichnet die Zusammenarbeit zwischen den beiden Bereichen. DevOps hat mit Continuous Delivery gemeinsame Ziele und Eigenschaften. Beide liefern kleine Änderungen, setzen auf die Zusammenarbeit und Koordination zwischen den Teams und haben das gemeinsame Ziel, die Markteinführung zu beschleunigen.
Um den Unterschied zwischen den beiden zu verdeutlichen: DevOps ist die Methode, die Unternehmen bei der Erstellung und Veröffentlichung von Software hilft. 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.
Sie können sich 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.
Continuous Delivery vs. kontinuierliche Integration
Bei der traditionellen Softwareentwicklung findet der Integrationsprozess am Ende eines Projekts statt, nachdem jeder Mitarbeiter seine Arbeit beendet hat. 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, bei der die Integrationsphase in den Entwicklungszyklus vorverlegt wird, so dass die Entwicklung, das Testen und die Integration des Codes in kürzeren Abständen erfolgen. Das Entwicklungsteam führt mehrmals täglich Codeänderungen in ein gemeinsames, zentrales Repository ein, um jederzeit eine Produktversion freigeben zu können. Dies erfordert einen Integrationsprozess, der reproduzierbar und automatisiert ist.
Continuous Delivery vs. kontinuierliche Bereitstellung
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 Ihr Unternehmen zunächst zu Continuous Delivery übergehen.
Die kontinuierliche Bereitstellung kann als Erweiterung der kontinuierlichen 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, stützt sich das Entwicklungsteam auf einen strengen Prozess, der die verschiedenen Schritte bis zur Bereitstellung automatisiert. Nachdem jede Integration die Freigabekriterien erfüllt hat, wird die Live-Anwendung mit dem neuen Code aktualisiert und kann in die Produktion gehen.
Agile Entwicklung und Continuous Delivery
Die agile Softwareentwicklung beruht auf einer Reihe von Werten und Prinzipien, bei denen sich Anforderungen und Lösungen durch die Zusammenarbeit im Team entwickeln. Sie umfasst eine adaptive Planung, eine frühzeitige Bereitstellung, eine kontinuierliche Verbesserung und eine flexible Reaktion auf Veränderungen. Bei der agilen Entwicklung 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 Evolution der Prozesse für die Softwarebereitstellung ging die agile Entwicklung der Continuous Delivery voraus.
Continuous Delivery ist eine Unterart der agilen Entwicklung, bei der das Team seine Software während der Entwicklung jederzeit für die Veröffentlichung bereithält. Es geht vielmehr darum, so zu entwickeln, dass die Software immer bereit für die Veröffentlichung ist - kontinuierlich.
Continuous Delivery und A/B-Testing
Experimentieren und Feature Management müssen Hand in Hand arbeiten. Experimentieren ist eine wichtige Möglichkeit für Ihr Unternehmen, Ideen zu validieren, bevor Sie neue Produkte, Funktionen und Erlebnisse für alle Besucher einführen. Bei Entwicklungsteams, die mit kontinuierlicher Integration und Continuous Delivery arbeiten, können Feature Flags, die das Rollout neuer Erlebnisse steuern, das Risiko mindern, etwas Unerprobtes für alle gleichzeitig einzuführen.
Damit A/B-Testing ein wichtiger Bestandteil des Bereitstellungsprozesses in Ihrem Unternehmen bleibt, integriert Optimizely Server Side Experimentation Feature Flags, Rollouts und Variablen mit Experimenten, so dass Sie den gesamten Lebenszyklus der Produktentwicklung an einem Ort kontrollieren können. Indem Sie zunächst einen A/B-Test mit einem Teil des Datenverkehrs durchführen, kann Ihr Team eine neue Funktion testen und schrittweise optimieren. Sobald Sie das beste Erlebnis für Ihre Kunden gefunden haben, können Sie es auf kontrollierte Weise für Ihren gesamten Kundenstamm einführen und so das Risiko von technischen Problemen bei der Veröffentlichung verringern.