Was genau bedeutet DevOps? Ein umfassender Überblick
DevOps hat sich zu einem viel diskutierten Begriff entwickelt, der von verschiedenen Personen unterschiedlich interpretiert wird. Diese Vielfalt an Definitionen kann die genaue Bedeutung von DevOps verschleiern. Um jedoch ein umfassendes Verständnis zu erlangen, ist es entscheidend, die grundlegenden Konzepte und die Entstehungsgeschichte von DevOps zu betrachten.
Die Wurzeln von DevOps
DevOps kann als eine Weiterentwicklung agiler Softwareentwicklungsmethoden angesehen werden. Der Bedarf an DevOps entstand aus dem Wunsch, mit der zunehmenden Geschwindigkeit der Softwareentwicklung Schritt zu halten, welche durch agile Ansätze erreicht wurde. Die bedeutenden Fortschritte in der agilen Kultur und Praxis der letzten Dekade verdeutlichten die Notwendigkeit eines ganzheitlichen Ansatzes für den gesamten Softwarebereitstellungsprozess.
Was genau bedeutet agile Softwareentwicklung?
Agile Entwicklung ist ein Sammelbegriff für verschiedene iterative und inkrementelle Softwareentwicklungsansätze. Zu den bekanntesten agilen Methoden gehören Scrum, Kanban, das Scaled Agile Framework® (SAFe®), Lean Development und Extreme Programming (XP). Trotz unterschiedlicher Ansätze teilen diese Methoden gemeinsame Kernwerte und eine Vision: Software in iterativen Zyklen zu entwickeln, kontinuierliches Feedback zu integrieren und so zu einer erfolgreichen, skalierbaren Bereitstellung zu gelangen. Dies beinhaltet kontinuierliche Planung, Tests, Integration sowie weitere Formen der Projekt- und Softwareentwicklung.
Im Gegensatz zu herkömmlichen, starren Wasserfallmodellen sind agile Methoden flexibel und anpassungsfähig. Sie legen großen Wert auf die Zusammenarbeit der Teammitglieder und die Fähigkeit, schnelle Entscheidungen zu treffen.
DevOps baut auf diesen agilen Prinzipien auf und erweitert sie, um die Bewegung von Softwareänderungen durch die verschiedenen Phasen von der Entwicklung über die Validierung bis zur Bereitstellung zu optimieren. Dies ermöglicht es funktionsübergreifenden Teams, die volle Verantwortung für das Softwareprodukt zu übernehmen – von der Konzeption bis zum Betrieb.
Herausforderungen, die durch DevOps gelöst werden
Bereitstellungsprozesse für verteilte Anwendungen erfordern oft die Auslieferung von Binär- und Konfigurationsdateien auf zahlreichen Servern. Mit einer wachsenden Serverfarm steigt die Komplexität, den Überblick zu behalten, was, wie und wo bereitgestellt werden soll. Die Folge sind lange Wartezeiten, bis Artefakte die nächste Stufe erreichen, was zu Verzögerungen bei Tests, Betriebszeiten und anderen wichtigen Prozessen führt.
DevOps fördert die Zusammenarbeit zwischen Software- und Webentwicklern sowie dem IT-Betrieb und ermöglicht eine reibungslose Bereitstellung von Prozessen. Durch die kontinuierliche Überprüfung der Effektivität und die Automatisierung kann die Entwicklung beschleunigt und häufigere Releases ermöglicht werden.
DevOps: Die wichtigsten Ziele
DevOps verfolgt das Ziel, die Zusammenarbeit aller Beteiligten von der Planung bis zur Auslieferung zu verbessern und durch Automatisierung des Bereitstellungsprozesses folgende Vorteile zu erzielen:
- Erhöhung der Bereitstellungsfrequenz
- Schnellere Markteinführung von Produkten
- Reduzierung der Fehlerrate bei neuen Versionen
- Verkürzung der Reaktionszeit bei Fehlern
- Verbesserung der Wiederherstellungszeiten im Fehlerfall
Ein typisches DevOps-Szenario
Zu Beginn eines neuen Softwareprojekts kommt ein Team aus Entwicklern, Testern, Betriebs- und Supportmitarbeitern zusammen. Gemeinsam wird ein Plan für die Entwicklung einer voll funktionsfähigen und einsatzbereiten Software erstellt. Täglich wird neuer Code bereitgestellt, sobald die Entwickler ihn fertiggestellt haben. Durch automatisierte Tests wird sichergestellt, dass der Code implementiert werden kann. Sobald die Tests erfolgreich durchlaufen wurden, wird der Code einer kleinen Nutzergruppe zur Verfügung gestellt. Nach einer Überwachungsphase, in der Stabilität und Fehlerfreiheit sichergestellt werden, wird der Code schließlich für alle Nutzer freigegeben. Ein Großteil dieser Schritte erfolgt automatisiert, ohne menschliches Zutun.
Die verschiedenen Reifegrade von DevOps
DevOps entwickelt sich in verschiedenen Reifegraden. Die wichtigsten Stufen sind:
Wasserfallentwicklung
In der Zeit vor der kontinuierlichen Integration schrieben Entwicklungsteams große Mengen an Code, der später von verschiedenen Teams zusammengeführt wurde. Die unterschiedlichen Codeversionen erforderten häufig umfangreiche Änderungen und die Bereitstellungsprozesse dauerten oft viele Monate.
Kontinuierliche Integration (CI)
Diese Methode integriert neu entwickelten Code schnell in den Hauptcode. CI ist eine agile Methode, die aus dem Extreme Programming stammt und wurde von DevOps übernommen. Sie ist oft der erste Schritt zur DevOps-Reife. Die kontinuierliche Integration umfasst die Überprüfung des Codes, die Kompilierung in ausführbaren Code und Validierungstests.
Kontinuierliche Auslieferung (CD)
Als zweite Stufe der DevOps-Reife baut CD auf der kontinuierlichen Integration auf. Mit CD können zusätzliche Automatisierungen und Tests eingefügt werden, damit der Code nicht nur schnell in die Hauptcodezeile zusammengeführt, sondern auch ohne menschliches Zutun fast bereitgestellt wird. Ziel ist es, den Code in einem Zustand zu halten, der jederzeit einsatzbereit ist.
Kontinuierliche Bereitstellung (CD)
Die kontinuierliche Bereitstellung geht noch einen Schritt weiter als die kontinuierliche Auslieferung, indem sie die Codebereitstellung in die Produktionsumgebung vollständig automatisiert. Das bedeutet, dass neu erstellter Code nach erfolgreichem Durchlaufen der automatisierten Tests ohne weiteres menschliches Eingreifen veröffentlicht wird, zuerst bei einer kleinen Benutzergruppe, danach für alle. Kontinuierliche Entwicklung wird von Unternehmen wie Netflix, Etsy, Amazon, Pinterest, Flicker, IMVU und Google praktiziert.
Der Mehrwert von DevOps
DevOps legt großen Wert auf die Entwicklung einer kollaborativen Kultur und die Steigerung der Effizienz durch Automatisierung mit verschiedenen DevOps-Tools. Die erfolgreiche Implementierung von DevOps erfordert eine Kombination aus der richtigen Kultur und geeigneten Tools.
DevOps-Kultur
DevOps fördert eine Kultur, die Zusammenarbeit, Automatisierung und Verantwortlichkeit stärkt. Sie ermöglicht eine verbesserte Kommunikation und reduziert Chaos, verbessert die Qualität der Software, bewertet Feedback und erhöht die Automatisierung. In der Agilen Entwicklung wird Fortschritt anhand funktionierender Software gemessen, und DevOps ermöglicht es Teams, eng zusammenzuarbeiten, um das gleiche Ziel zu verfolgen.
DevOps-Tools
DevOps-Tools umfassen Konfigurationsmanagement, Testautomatisierung, Versionskontrolle, Anwendungsentwicklung und Überwachung. Für die Implementierung von CI, CD und Continuous Deployment werden verschiedene Tools benötigt, teilweise auch dieselben. Je weiter die Lieferkette fortschreitet, desto mehr Tools kommen zum Einsatz.
Hier sind einige gängige Tools und Praktiken:
Quellcode-Repository – Hier speichern Entwickler ihren Code. Das Repository verwaltet verschiedene Codeversionen, um ein versehentliches Überschreiben von Code zu vermeiden. Beliebte Tools sind Git, Apache Subversion, IBM Rational, Artifactory, Nexus und Eclipse.
Build-Server – Automatisierungstools, die Code in eine ausführbare Form kompilieren. Beispiele sind Jenkins, SonarQube und Artifactory.
Konfigurationsmanagement – Tools wie Puppet, Chef, Ansible, SaltStack und Run Deck helfen bei der Verwaltung der Konfiguration für Anwendung und Infrastruktur, um Konsistenz über verschiedene Umgebungen hinweg zu gewährleisten.
Virtuelle Infrastruktur – AWS, GCP und Azure sind führende Anbieter von Cloud-Diensten, die APIs zur Verfügung stellen, um die Infrastruktur bereitzustellen und zu verwalten.
Fazit
Dieser Überblick sollte Ihnen ein grundlegendes Verständnis für DevOps vermittelt haben. Wenn Sie Ihr Wissen vertiefen möchten, gibt es viele Online-Ressourcen.
Artikel von Payal Goyal