Was ist Continuous Delivery
Unter Continuous Delivery versteht man eine Prozesskette, die alle Schritte umfasst, die eine automatisierte Bereitstellung von Geschäftsapplikationen bis in die Produktion zu jedem Zeitpunkt ermöglicht (Production-Readiness). Dabei setzt Continuous Delivery auf die Continuous Integration Kette auf und erweitert diese um den zweiten Prozessteil, der sich primär um eine schnelle und automatische Bereitstellung der durch CI Teil kompilierten, getesteten und als Artefakte bereitgestellten Teile der Applikationslandschaft auf verschiedenen Testumgebungen bis in die Produktion kümmert. Auf jeder dieser Umgebungen (auch „Stages“ bezeichnet) können weitere qualitätssichernde Schritte erfolgen, insbesondere umfassendere Integrationstests, End2End Tests, Layout und Usability Tests, Infrastruktur und Stress Tests sowie Abnahmetests und Kunden-Previews.
Wichtig ist, dass mittels automatisierter CD Kette sichergestellt werden kann, dass immer identische Software Artefakte auf allen Stages verteilt werden und man so sukzessive die gleiche immer besser und besser abgesicherte Software Version bis zur Produktion „durchreicht“.
Erst wenn alle vorherigen Schritte erfolgreich waren, kann die Software Version in die Produktion ausgerollt werden, wobei dieser Schritt in den meisten Unternehmen nicht voll automatisiert durchläuft, sondern kontrolliert manuell durch die Entscheider freigegeben wird. Deshalb spricht man in diesem Fall über sogenannte „Production Readiness“, die durch CD Kette erreicht wird und jederzeit auf Wunsch ein Rollout in die Produktion ermöglicht, aber eben auch nicht bedeutet, dass jede Software Version in die Produktion ausgerollt wird.
Obwohl rein methodisch die gesamte CI/CD Prozesskette, wie beschrieben, relativ sauber in die einzelnen Bestandteile CI und CD aufgeteilt werden kann, umfasst das allgemeine Continuous Delivery Verständnis in der Praxis häufig die gesamte CI/CD Kette. Continuous Delivery steht damit auch als Synonym für die gesamte CI/CD Kette.
Continuous Delivery Prozesskette
Die nachfolgende Abbildung veranschaulicht die typischen Schritte einer Continuous Delivery Kette:
Abhängig von dem verwendetem CI/CD System und der DevOps Strategie, findet man in der Praxis verschiedene Alternativen für die Umsetzung dieser Schritte:
- Als zwei explizite Phasen. CD Phase baut auf CI Phase auf (Bsp. Microsoft Azure Devops)
- Als zwei explizite Teilketten. CD Kette hat eine Abhängigkeit zu CI Kette und wird automatisch nach erfolgtem CI Lauf aufgerufen (Bsp. Jenkins)
- Als eine einzige CI/CD Pipeline, die alle Schritte enthält
Ziele von Continuous Delivery
- Minimierung manueller, langsamer und fehleranfälliger Deployment Aktivitäten
- Standardisierte systematische und reproduzierbare Deployments auf jeder Umgebung
- Infrastructure as a Code (IaaC)
- Beschleunigung der Release Cycles und Reduktion der Release Kosten
- Beschleunigung der Feedback Schleife und Erhöhung der Kundenzufriedenheit
Best Practices
- CD setzt CI voraus
- IaaC
- Containerisierung via Docker als Enabler
- Deployment: Effiziente Paketierung und Versionierung
- Testautomatisierung: Leichtgewichtige und flexible Infrastruktur
- Cross-funktionale agile Teams als Enabler
- Enge Zusammenarbeit zwischen Entwicklern, Testern und Paketierern
- Production Releases on-demand (durch Business) und nicht automatisch
- Transparente Zugänglichkeit der CD Ergebnisse für jeden Team Mitglied
Folgen der veränderten Arbeitsweise
- Reduktion der operativen Aufwände
- Keine Release Notes
- Keine explizite Release Manager notwendig (aber Koordination trotzdem erforderlich)
Verwandte Begriffe
- Continuous Integration
- Jenkins
- Azure Devops