Development Operations (DevOps)
Während die Seite der Entwicklung ein Projekt durch Änderungen schnell voran bringen möchte, ist es das Ziel der Administration, möglichst wenig Änderungen vorzunehmen, um den reibungslosen Betrieb nicht zu gefährden. DevOps ist die Schnittstelle zwischen der Software-Entwicklung und der Administration mit dem Ziel, deren Gegensätzlichkeit zu kompensieren.
Es gibt einige Methoden, um einen optimalen Kompromiss zwischen beiden Interessensgruppen zu finden:
CI - Continuous Integration
Bei der kontinuierlichen Auslieferung werden automatische Schritte beim Einchecken von Änderungen in die Versionsverwaltung durchgeführt. Sie beinhalten diverse Tests. Wenn die Tests erfolgreich sind, wird automatisch eine neue funktionierende Version der Software gebaut.
CD - Continuous Delivery
ist die automatische fortlaufende Auslieferung der neuen Softwareversion an einen oder mehrere Staging Server, um die Stabilität der Software zusätzlich zu überprüfen. In manchen Fällen wird mit Continuous Deployment die stabile Software in die Produktivumgebung übernommen.
Microservices
Eine umfangreiche Software wird in mehrere einzelne Dienste entkoppelt. Hier kommen oft RestAPI’s für die Kommunikation mit und zwischen diesen Diensten zum Einsatz. Microservices können auf unterschiedlichen Systemen und Sprachen laufen und einzeln skaliert werden.
Versionsverwaltung
Hier werden alle Änderungen an einer Software verwaltet. Es gibt verschiedene Entwicklungszweige, damit beispielsweise mehrere Teams an jeweils einem neuen Feature arbeiten können. Bei der Übertragung von Änderungen an das Versionskontrollsystem werden weitere automatische Aktionen gestartet.
Service Monitoring
Dienste und Systeme wollen überwacht werden. Ziel ist die Erkennung bestehender als auch die Vorhersage bevorstehender Probleme. Die Daten können für die Überprüfung der Einhaltung bestehender Service Level Agreements verwendet werden.
Agile Softwareentwicklung
Agile Softwareentwicklung ist ein Sammelbegriff für eine Reihe von Methoden und Praktiken, die auf Werten und Prinzipien des Manifests Agiler Softwareentwicklung basieren.
Automatische Softwaretests
Mit automatischen Unit-, Integrations-, System- und Performance-Tests wird die Qualität und Fehlerfreiheit von Software getestet. Außerdem kann der Quelltext auf Konformitat mit Clean Code Richtlinien überprüft werden, um ihn besser wartbar zu machen.
Key Performance Indicators
Um die Auswirkungen auf strategische Ziele zu messen benötigt man Performance-Indikatoren. Diese messen beispielsweise die Häufigkeit und Fehlschläge von Software-Auslieferungen. Erkennungs- und Behebungszeiten von Fehlern sind weitere mögliche Indikatoren.
Selbst wenn man bei einem bestehenden Projekt noch nicht alle dieser Methoden verwendet, macht es Sinn, diese nach und nach umzusetzen. Einige Methoden haben dabei aufgrund ihres Einsparpotentials eine sehr kurze Amortisationsdauer. Außerdem erhöht sich durch die Standardisierung und das Qualitätsmanagement die Stabilität und damit Betriebssicherheit der Software.
Optimalerweise beginnt man mit der Implementierung dieser Methoden bereits zum Beginn des Projekts. Dabei muss nicht alles nach Drehbuch ausgeführt, sondern sinnvoll priorisiert werden. Auch in einem laufenden Projekt können die Methoden eingeführt werden. Das erfordert dann meist etwas mehr Aufwand. Außerdem beginnt der Zeitpunkt der Ersparnis auch frühestens mit dem Einführen der entsprechenden Methode.
Wenn man beispielsweise von Beginn an eine umfassende CI/CD Pipeline erstellt, spart man mit jeder erstellten Version die Zeit zum Testen, für den Bau und die Auslieferung der Software. Diese Zeitersparnis kann selbstverständlich erst stattfinden, wenn die Pipeline implementiert wurde.
Fehler und Betriebsausfälle von Software können große Kosten verursachen und zu Image-Schäden führen. Im Bereich "Software as a service" ist das Risiko noch größer, da die Kunden für einen Dienst bezahlen, der während des Ausfalls nicht verfügbar ist. Unter Umständen kann dieser Kunde in solch einem Fall seinen eigenen Geschäftsbetrieb nicht vollständig ausführen. Um dies zu verhindern, sollten sie mit steigendem Erfolg auch in eine steigende Erfolgssicherung investieren und eine optimale DevOps Struktur erstellen oder erstellen lassen.
Wir beraten Sie gerne.
Werkzeuge
Hier findest du unsere Hauptwerkzeuge für die Erstellung von CI/CD Pipelines:
Docker
Containerbasierte Virtualisierung von Software-Anwendungen. Im Gegensatz zu virtuellen Maschinen teilen sich Docker-Container den Kernel des Host-Systems. Dadurch sind sie klein und können auf einfachste Weise neu gebaut werden, was sie quasi portabel macht.
Kubernetes
Das Orchestrationswerkzeug für die Erstellung von Container basierten Cloud-Anwendungen ermöglicht deren fein justierte Skalierung.
Github
Der Online-Dienst zur Versionsverwaltung für Softwareprojekte bietet mit Github-Actions gute Möglichkeiten zur Erstellung von CI-Pipelines.
Häufig wird Github mit Jenkins als CI-Umgebung kombiniert, wenn die Funktionalität von Github-Actions nicht ausreichend ist.
Gitlab
Webanwendung zur Versionsverwaltung für Git-Softwareprojekte mit einer vollständigen CI/CD Pipeline (Gitlab-CI). Bietet viele Zusatzfunktionen wie Wiki, Container Registry uvm.