Continuous Delivery Pipeline als Erfolgsfaktor von DevOps
DevOps erhöht die Agilität des gesamten Software-Entwicklungszyklus. Um davon zu profitieren, ist ein Umdenken sowohl in der Organisation, den Methoden als auch dem Technologieeinsatz notwendig. Zentraler Erfolgsfaktor ist die Automatisierung der „Software-Produktionsstraße“ durch den Aufbau einer Continuous Delivery (CD) Pipeline.
Im msg Reifegradmodell für DevOps1 wird die große Bedeutung der Pipeline für die Bereiche Code, Build, Deploy und Test deutlich. Sie ist damit nicht der einzige, aber ein wesentlicher Erfolgsfaktor für die Einführung von DevOps. Dieser IT-Spickzettel dient als Hilfestellung und Checkliste beim Aufbau einer CD-Pipeline. Dazu zeigt er die zu adressierenden Aufgabengebiete und gibt jeweils einen exemplarischen Überblick über verbreitete Technologien zur Erfüllung der Aufgabe.
Auswirkung der konsequenten Umsetzung einer CD-Pipeline auf den DevOps-Reifegrad einer Organisation
Continuous Delivery Pipeline
Die Auswahl an DevOps-Tools ist groß. Der Aufbau der CD-Pipeline sollte schrittweise erfolgen, beginnend bei den Aufgabengebieten, deren Automatisierung den größten Mehrwert für die jeweilige Organisation bietet. Bei der Tool-Auswahl gilt: maximale Automatisierung bei minimaler Komplexität. Es sollte auf möglichst wenige, aber bewährte Technologien zurückgegriffen werden.
Plan
Ausgangslage der Pipeline bildet ein agiles Entwicklungsvorgehen. Zu erstellende Features werden flexibel in einem Backlog verwaltet.
Code
Die Systementwicklung erfolgt durch Umsetzung der einzelnen Features. Jeder Check-in in die Versionsverwaltung durchläuft die nachfolgende CD-Pipeline. Automatisierte, vor Checkin durchgeführte Entwicklertests stellen die Mindestqualität der Implementierung sicher.
- Backlog: Jira, GitLab, Gitea
- Versionsverwaltung (Quellcode): Git (u. a. GitLab, Gitea, GitHub)
- Entwicklertests: JUnit, Jasmine
Build
Der Continuous Integration Server stößt automatisch einen Build des Quellcodes inklusive der automatisierten Integrationstests und Quellcodeanalysen an. Die erstellten Binärpakete werden in einem Repository versioniert und für die Folgeschritte zur Verfügung gestellt.
- Build-Automatisierung: Maven, Gradle, npm, Yarn
- CI-Server: Jenkins, GitLab CI, Drone
- Quellcode-Analyse: SonarQube, jQAssistant
- Integrationstests: JUnit, Jasmine
- Binärformat: OCI, Docker Image Manifest
- Repository (Binaries): Nexus, Artifactory
Deploy
Die Konfigurationen der Betriebsumgebungen werden ebenfalls versioniert. Das vollständig automatisierte Deployment in die Testumgebungen erfolgt per Knopfdruck durch die Tester. Das Deployment in die Produktionsumgebung erfolgt nach Freigabe der Software (Continuous Delivery).
- Versionsverwaltung (Konfiguration): Git
- Automatisierungsframework: Ansible, Puppet, Chef
- Orchestrierung und Deployment: Kubernetes
Test
Die automatisierten Verbundtests (funktional und nichtfunktional) stellen die Qualität des Gesamtverfahrens sicher. Nach deren Erfolg werden notwendige manuelle (Akzeptanz-) Tests durchgeführt.
- Verbundtests (allgemein): JUnit, Jasmine
- Lasttests: JMeter
- UI-Tests: Selenium, TestCafé
- Schnittstellentests: SoapUI
Operate
Die Tragfähigkeit des Systems muss in Produktion überwacht und Handlungsbedarfe kurzfristig an die Entwicklung gemeldet werden.
Quelle