Continuous Delivery

Continuous Delivery ist der Softwareentwicklungsprozess, bei dem Code-Änderungen schnell, sicher und mit höherer Qualität in die Produktion gebracht werden.

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, üblicherweise mithilfe von Tools zur Automatisierung der Deployments. Engineering-Teams nehmen Änderungen an ihrer Software in kurzen Zyklen vor, sodass sie häufiger getestet und freigegeben werden können. Dieser Ansatz ermöglicht inkrementelle Änderungen bei sowohl niedrigeren Kosten als auch geringerem Risiko. Der Ansatz wurde erstmals von Jez Humble und David Farley in ihrem Buch Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation populär gemacht.

Wie funktioniert Continuous Delivery?

Hier ist eine Übersicht des Continuous-Delivery-Prozesses:

  • Continuous Integration (CI): Teams integrieren Code-Änderungen häufig in ein gemeinsames Repository. Automatisierte Tests werden auf diesen Änderungen ausgeführt, um sicherzustellen, dass die Codebasis funktionsfähig bleibt.
  • Automatisierte Builds: Wenn neuer Code eingecheckt wird, startet ein automatisierter Build-Prozess, der Code kompiliert und ausführbare Artefakte erstellt.
  • Automatisiertes Testen: Automatisierte Tests (Unit-Tests, Integrationstests usw.) validieren die Funktionalität des Codes. Wenn die Tests bestanden werden, wird der Code weitergeführt.
  • Deployment-Pipeline: Code, der die Tests bestanden hat, durchläuft eine Deployment-Pipeline. Diese Pipeline besteht aus Phasen wie Staging, Testing und Produktion.
  • Automatisiertes Deployment: Wenn Code-Änderungen alle Phasen bestehen, werden sie automatisch in die Produktion oder eine produktionsähnliche Umgebung deployed.

Warum Sie sowohl Continuous Delivery als auch A/B-Testing benötigen

Continuous Delivery gewährleistet eine effiziente Software-Bereitstellung, während A/B-Testing Änderungen validiert und sicherstellt, dass sie die Nutzerbedürfnisse erfüllen. Die Integration beider Methoden ermöglicht hochwertige Software, die durch Nutzerfeedback und Dateneinblicke gesteuert wird.

  1. Qualitätssicherung

    CD liefert Updates schnell, während A/B-Testing Änderungen mit echten Nutzerdaten validiert und effektive Deployments sicherstellt, die die User Experience verbessern. Updates kommen nicht nur schnell an, sondern sind auch optimiert.
  2. Verbesserung

    A/B-Testing ermöglicht es Teams, per CD bereitgestellte Features schrittweise auf Basis von Nutzerfeedback zu verfeinern, was zu besser performenden Produkten führt.
  3. Datengestützte Entscheidungen

    Die Integration von A/B-Testing in CD gewinnt frühzeitig Erkenntnisse und leitet Entscheidungen zur Feature-Priorisierung und zum Deployment.

Vorteile von Continuous Delivery

Im Folgenden sind die wichtigsten Vorteile einer Continuous-Delivery-Pipeline in der Cloud aufgeführt.

  1. Schnelligkeit bis zur Markteinführung

    Marktbedingungen befinden sich in einem ständigen Wandel, da sich das Verbraucherverhalten verändert. Produkte können plötzlich Anklang finden oder ebenso plötzlich nachlassen. Gleichzeitig können technologische Fortschritte auch die Notwendigkeit beeinflussen, Änderungen schneller an Endnutzer freizugeben. Um auf unvorhersehbare Markt- und Technologieveränderungen zu reagieren, ist es für Engineers schneller, Software mithilfe von Continuous Delivery freizugeben.
  2. Geringeres Risiko

    Wenn inkrementelle Änderungen häufiger freigegeben werden, können Fehler früher im Entwicklungsprozess erkannt und korrigiert werden. Es ist auch einfacher, kleinere Änderungen bei Bedarf zurückzusetzen, und es hilft, unbeabsichtigte Änderungen durch Versionskontrolle und die Verwendung einer Staging-Umgebung aus der Produktionsumgebung fernzuhalten. Die Nutzung automatisierter Tests sowie die Aufteilung von Tests in kleinere Unit-Tests sind weitere DevOps-Erfolgsmethoden, die Ausfallzeiten reduzieren.
  3. Koordination und Kommunikation zwischen Teams

    Mit Continuous Delivery teilen Teams die Verantwortung für die Software-Bereitstellung. Dies bricht die Silos zwischen Gruppen oder Abteilungen auf und beseitigt die Unvorhersehbarkeit und den Stress bei Software-Releases. Häufigere Releases zu deployen ist ein Prozess, der das Team in einem regelmäßigen, vorhersehbaren Rhythmus arbeiten lässt.
  4. Schnellerer Lernzyklus

    Neue Features schneller auf den Markt zu bringen bedeutet zeitnähere Rückmeldungen von Ihren Kunden. Dieser Release-Prozess ermöglicht es Ihnen, von Ihren Kunden zu lernen, indem Sie funktionierende Software früher in ihre Hände geben, ihr Feedback einbeziehen und Ihr Produkt verbessern.

Continuous-Delivery-Beispiel

Stellen Sie sich eine E-Commerce-Plattform vor, die mit einem neuen Checkout-Ablauf experimentieren möchte, um die Conversion Rate zu verbessern. 

  • Ideengenerierung: Identifizierung der Notwendigkeit eines neuen Checkout-Ablaufs zur Verbesserung von Conversions.
  • Entwicklung: Erstellung von zwei Checkout-Versionen. A (aktueller Ablauf) und B (neuer optimierter Ablauf)
  • CI und Deployment: Testen beider Versionen in einer Staging-Umgebung via Continuous Integration.
  • A/B-Testing: Verwendung von Feature Toggles, um Nutzer zufällig zu Version A oder B zu leiten.
  • Datenerfassung: Verfolgung von Nutzermetriken (Conversion Rate, Abbruchrate) in beiden Versionen.
  • Analyse: Vergleich von Performance-Metriken zur Bestimmung des besser performenden Checkout-Ablaufs.
  • Deployment: Wenn Version B überzeugt, plattformweites Deployment via CD.
  • Monitoring: Kontinuierliche Überwachung und Verfeinerung des neuen Ablaufs auf Basis von Nutzerfeedback und Daten.

Continuous Delivery & DevOps

Der Begriff „DevOps“ ist eine Kombination aus „Development“ und „Operations“ und bezeichnet die Zusammenarbeit zwischen beiden. DevOps teilt gemeinsame Ziele und Eigenschaften mit Continuous Delivery. Beide liefern kleine Änderungen, setzen auf Zusammenarbeit und Koordination zwischen Teams und teilen ein gemeinsames Ziel einer schnelleren Time-to-Market.

Um den Unterschied zwischen beiden zu verdeutlichen: DevOps ist die Methodik, die Unternehmen hilft, Software aufzubauen und freizugeben. Es ist die Praxis, 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 freigegeben werden kann.

Sie können DevOps als die größere Kraft und Philosophie hinter dem Service betrachten, während Continuous Delivery der Prozess ist, der ihn in der Cloud bereitstellt.

Continuous Delivery vs. Continuous Integration

In der traditionellen Softwareentwicklung findet der Integrationsprozess am Ende eines Projekts statt, nachdem jede Person ihre Arbeit abgeschlossen hat. Dieser Prozess kann lange dauern und für alle Beteiligten frustrierend sein.

Continuous Integration ist eine Softwareentwicklungspraxis, die die Integrationsphase im Entwicklungszyklus nach vorne verlagert, sodass Entwicklung, Testen und Integration von Code mit größerer Häufigkeit stattfinden. Das Entwicklungsteam führt Code-Änderungen mehrmals täglich in einem gemeinsamen, zentralen Repository zusammen, um jederzeit eine Produktversion freigeben zu können. Dies erfordert einen Integrationsprozess, der reproduzierbar und automatisiert ist.

Continuous Delivery vs. Continuous Deployment

In der Praxis des Continuous Deployments gehen alle Software-Änderungen, die Tests bestehen, automatisch in die Produktion. Um eine Continuous-Deployment-Pipeline zu erstellen, muss Ihr Unternehmen zunächst Continuous Delivery erreichen.

Continuous Deployment kann als Erweiterung von Continuous Integration betrachtet werden, mit dem Ziel, die Zeitspanne zwischen dem Schreiben neuen Codes und dessen Verwendung in der Produktions-Codebasis zu minimieren.

Um Continuous Deployment zu erreichen, verlässt sich das Entwicklungsteam auf einen rigorosen Prozess, der die verschiedenen Schritte bis zum Deployment automatisiert. Nachdem jede Integration die Release-Kriterien erfüllt, wird die Live-Anwendung mit neuem Code aktualisiert und ein Produktions-Deployment kann stattfinden.

Agile Entwicklung und Continuous Delivery

Agile Softwareentwicklung hält eine Reihe von Werten und Prinzipien bereit, bei denen sich Anforderungen und Lösungen durch Teamzusammenarbeit weiterentwickeln. Sie umfasst adaptive Planung, frühzeitige Bereitstellung, kontinuierliche Verbesserung und flexible Reaktion auf Veränderungen. In Agile gibt es keinen festgelegten Zeitrahmen für jeden Release, aber die Idee ist, dass sie häufig stattfinden: vielleicht alle paar Wochen oder alle paar Monate, mit einer Präferenz für das Kürzere der beiden.

In der Entwicklung von Prozessen für die Software-Bereitstellung ging die agile Entwicklung dem Continuous Delivery voraus.

Continuous Delivery ist eine Teilmenge von Agile, bei der das Team seine Software während der Entwicklung jederzeit bereit zur Freigabe hält. Es geht mehr darum, so zu entwickeln, dass die Software immer bereit zur Freigabe ist – kontinuierlich.

Continuous Delivery und A/B-Testing

Experimentieren und Feature Management müssen Hand in Hand gehen. Experimentieren ist ein wichtiger Weg für Ihr Unternehmen, Ideen zu validieren, bevor neue Produkte, Features und Erlebnisse für alle Besucher gestartet werden. Bei Entwicklungsteams, die Continuous Integration und den Continuous-Delivery-Prozess nutzen, können Feature Flags, die das Rollout neuer Erlebnisse steuern, das Risiko mindern, etwas Unerprobtes gleichzeitig für alle einzuführen.

Um A/B-Testing als wichtigen Teil des Deployment-Prozesses Ihrer Organisation zu erhalten, integriert Optimizely serverseitiges Experimentieren Feature Flags, Rollouts und Variablen mit Experimentieren, sodass Sie den gesamten Produktentwicklungszyklus an einem Ort steuern können. Indem Sie zunächst einen A/B-Test für einen Teil des Traffics durchführen, kann Ihr Team ein neues Feature testen und schrittweise optimieren. Sobald Sie die beste User Experience haben, kann sie auf kontrollierte Weise für Ihren gesamten Kundenstamm ausgerollt werden, um das Risiko von technischen Problemen beim Release-Prozess zu reduzieren.