Definition

Continuous Deployment (kontinuierliche Bereitstellung)

Was ist Continuous Deployment (kontinuierliche Bereitstellung)?

Continuous Deployment, zu Deutsch kontinuierliche Bereitstellung, ist eine Strategie für die Softwareentwicklung und -freigabe, bei der jede Codeänderung automatisch eine Pipeline von Tests und Prüfungen durchläuft, bevor sie in die Produktion übernommen wird.

Continuous Deployment beseitigt menschliche Sicherheitsvorkehrungen gegenüber ungeprüftem Code in laufender Software. Es sollte nur dann eingesetzt werden, wenn die Entwicklungs- und IT-Teams sich strikt an produktionsreife Entwicklungspraktiken und gründliche Tests halten und wenn sie ausgefeilte Echtzeit-Überwachung und Metriken in der Produktion anwenden, um Probleme mit neuen Softwareversionen zu entdecken.

Wie funktioniert Continuous Deployment?

Der Zweck von Continuous Deployment besteht darin, die Entwicklung zu beschleunigen und die Zeit zu verkürzen, die es dauert, bis Änderungen die Endbenutzer erreichen.

Für Continuous Deployment wird in der Regel ein Continuous-Integration-System verwendet, um Änderungen an der Codebasis automatisch zu erstellen und zu testen. Sobald die Änderungen alle Tests bestanden haben, werden sie automatisch in einer Produktionsumgebung bereitgestellt. Dies kann mit Unterstützung von Deployment-Pipelines erreicht werden, die den Prozess der Erstellung, des Testens und der Bereitstellung von Aktualisierungen automatisieren. Die Continuous-Deployment-Pipeline umfasst verschiedene Schritte, zum Beispiel die Erstellung des Codes, die Durchführung automatisierter Tests, die Bereitstellung in Staging-Umgebungen, das Testen in diesen Umgebungen und die Bereitstellung in der Produktion.

Continuous Deployment stützt sich stark auf Automatisierung, um sicherzustellen, dass Änderungen konsistent und zuverlässig bereitgestellt werden. Durch die kontinuierliche Bereitstellung von Code-Updates können Entwicklungsteams Probleme schnell entdecken und beheben, das Risiko der Einführung von Fehlern verringern und letztendlich den Endbenutzern schneller einen Mehrwert bieten.

Vorteile von Continuous Deployment

Continuous Deployment bietet Entwicklungsteams folgende Vorteile:

  • Beschleunigte Softwarebereitstellung. Der wichtigste Vorteil der kontinuierlichen Entwicklung besteht darin, dass die Ausführung von Codeänderungen beschleunigt wird, indem Engpässe in jeder Phase der Pipeline beseitigt werden. Der Code wird mit minimaler Ausfallzeit ausgeführt, so dass die Endbenutzer schneller von den neuen Funktionen profitieren können, da keine wochen- oder monatelange Wartezeit bis zur Fertigstellung des nächsten Release-Zyklus entsteht.
  • Schnelleres Feedback. Häufigere Anwendungs-Upgrades führen zu einer kürzeren Feedback-Schleife mit dem Kunden. Bei Continuous Deployment muss ein Entwickler oder Produktmanager nur ein paar Minuten warten, um die Auswirkungen neuer Änderungen auf das Benutzerverhalten oder die Kundenbindung zu beobachten und entsprechend zu ändern. Wenn das Kundenverhalten darauf hindeutet, dass eine schnelle Umstellung oder Änderung des Ansatzes erforderlich ist, ist die Möglichkeit, Updates schnell zu veröffentlichen, von Vorteil. Dies hilft auch bei der Erkennung von Problemen und verkürzt die Feedback-Schleife für benutzerseitige Änderungen.
  • Geringere Entwicklungsrisiken. Continuous Deployment verringert Entwicklungsrisiken. Wenn Teams konsistent und häufig integrieren, verringern sie potenzielle Risiken erheblich, da sie immer den aktuellen Status des Systems kennen.
  • Reduzierte manuelle Prozesse. Continuous Deployment ermutigt Entwickler, so viel wie möglich von der Softwareentwicklung und dem Code-Release-Prozess zu automatisieren, einschließlich der Release-Tests. Durch die Automatisierung können die Entwickler neue Versionen schneller veröffentlichen und Zeit sparen, die normalerweise für manuelle Prozesse aufgewendet wird.
  • Bessere Zusammenarbeit. Continuous Deployment ermutigt die Teams zu regelmäßigem Input, so dass das Produkt durch Iterationen verbessert und weiterentwickelt werden kann.

Continuous Deployment versus Continuous Delivery

Continuous Integration, Delivery und Deployment werden zusammenfassend als kontinuierliche Softwareentwicklung (Continuous Software Development) bezeichnet und mit den Methoden von Agile und DevOps in Verbindung gebracht. Continuous Delivery und Deployment haben ihren Ursprung in der kontinuierlichen Integration, einer Methode zur schnellen Entwicklung, Erstellung und Prüfung von neuem Code mit Unterstützung von Automatisierung, so dass nur Code, von dem bekannt ist, dass er korrekt funktioniert, Teil eines Softwareprodukts wird.

Continuous Deployment ist nicht dasselbe wie Continuous Delivery, obwohl die beiden Begriffe oft verwechselt werden.

Continuous Delivery liegt vor, wenn Entwickler neuen Code häufig an die Teams für Qualitätssicherung und Betrieb zum Testen weitergeben. Continuous Delivery umfasst in der Regel einen produktionsähnlichen Bereitstellungsbereich und es gibt oft eine zeitliche Verzögerung zwischen einer Veröffentlichung und der Überprüfung, der manuellen Annahme von Änderungen und der Freigabe des neuen Codes für die Produktion.

Im Gegensatz dazu ist bei Continuous Deployment kein Staging-Bereich erforderlich, in dem Codeänderungen manuell geprüft und verifiziert werden. Automatisierte Tests werden früh in den Entwicklungsprozess integriert und durchlaufen alle Phasen der Veröffentlichung. Einer der Hauptvorteile von Continuous Deployment ist, dass es keine Zeitverzögerung zwischen dem Zeitpunkt, an dem eine Codeänderung die Tests auf Anwendungs- und Plattformebene bestanden hat, und dem Zeitpunkt, an dem sie in die Live-Produktion übergeht, gibt.

Sowohl Continuous Delivery als auch Continuous Deployment stützen sich auf Tools für die Infrastrukturbereitstellung in Echtzeit und die Anwendungsüberwachung, um Probleme zu entdecken, die in den Test-Feedbackschleifen vor der Bereitstellung nicht erkannt wurden. Testen und Überwachen sind bei Continuous Deployment noch wichtiger, da kein menschliches Eingreifen zur Leistungsüberprüfung erforderlich ist.

Die Einhaltung gesetzlicher Vorschriften oder andere Einschränkungen können eine IT-Organisation daran hindern, Continuous Deployment einzuführen. Andere Überlegungen, wie der Reifegrad von DevOps-Prozessen und Best Practices innerhalb der IT-Organisation, sollten ebenfalls Einfluss auf die Entscheidung haben, ob der Code auf der Basis von Continuous Delivery, Continuous Deployment oder einer Kombination aus beiden Ansätzen je nach Anwendung und Benutzern bereitgestellt werden soll.

Continuous Delivery versus Continuous Deployment
Abbildung 1: Obwohl die beiden Begriffe oft verwechselt werden, unterscheiden sich Continuous Delivery und Continuous Deployment darin, wie Codeänderungen für die Produktion freigegeben werden.

Tools für Continuous Deployment

Pipelines für Continuous Deployment verwenden Tools, die denen für Continuous Delivery ähneln, wobei der Schwerpunkt auf dem Testen des Codes vor und nach der Bereitstellung in der Produktion liegt.

Im Folgenden finden Sie einige der wichtigsten Tools in einem Continuous Deployment Workflow:

  • Tools für die kontinuierliche Integration. Continuous Integration ist ein entscheidendes Merkmal von Continuous Deployment, das Entwicklungsengpässe reduziert, wenn mehrere Entwickler an demselben Projekt arbeiten. Zu den gängigen Tools zur Automatisierung der Erstellung, des Testens und der Bereitstellung von Codeänderungen gehören AWS CodeBuild, CircleCI, das Open Source Tool Jenkins und Travis CI.
  • Versionskontrollsysteme. Die Versionskontrolle, die auch als Revisions- oder Versionskontrolle bezeichnet wird, erleichtert die Zusammenarbeit im Team unabhängig davon, wo und wann die einzelnen Personen arbeiten, indem sie die Sichtbarkeit der Aktualisierungen und Änderungen eines Projekts erhöht. Versionskontrollsysteme wie Git, Apache Subversion und Mercurial sind für die kontinuierliche Bereitstellung von entscheidender Bedeutung, da sie den Benutzern einen Mechanismus zur Verfolgung neuer Versionen und zur Verwaltung von Codeänderungen bieten.
  • Tools zur Konfigurationsverwaltung. Bei der Konfigurationsverwaltung wird sichergestellt, dass die gesamte Software und Hardware in einem konsistenten Zustand gehalten wird. Dies kann die ordnungsgemäße Konfiguration und Automatisierung aller Server, Netzwerke, Speicher und Software umfassen. Für die Konfiguration und Verwaltung von Infrastruktur und Anwendungen werden Tools wie Ansible, Chef und Puppet eingesetzt.
  • Monitoring und Observability Tools. Die Überwachung und Reaktion auf Vorfälle bei Continuous-Deployment-Konfigurationen sollte möglichst in Echtzeit erfolgen, um die Zeit bis zur Wiederherstellung zu verkürzen, wenn es Probleme im Code gibt. Für diese Zwecke werden Tools wie Datadog, Elastic Stack, Grafana, New Relic, Prometheus und Splunk eingesetzt.
  • Containerisierung und Orchestrierungs-Tools. Einige Anwendungen können in Containern bereitgestellt werden, um Updates von der zugrunde liegenden Infrastruktur zu isolieren. Containerisierungs-Tools wie Amazon Elastic Container Service, Docker, Google Kubernetes Engine und Kubernetes werden verwendet, um Anwendungen und Abhängigkeiten in einem portablen Format zu verpacken, was die Skalierung und Bereitstellung erleichtert.
  • Automatisierungs-Tools für die Bereitstellung. Um die Bereitstellung von Codeänderungen in Produktionsumgebungen zu automatisieren, werden Tools wie AWS CodeDeploy, Azure DevOps und Google Cloud Build verwendet.

Rollback-Funktionen sind für die Deployment Tools erforderlich, damit unerwartete oder unerwünschte Auswirkungen von neuem Code in der Produktion schnell erkannt und gemildert werden können. Unternehmen können sich auf Canary Deployment, Sharding, Blue/Green Deployment, Feature Flags oder Toggles und andere Deployment-Kontrollen verlassen, um Unterbrechungen der kontinuierlichen Bereitstellung durch Benutzer zu vermeiden.

Diese Definition wurde zuletzt im Oktober 2023 aktualisiert

Erfahren Sie mehr über Softwareentwicklung