CI/CD-Pipelines wachsen oft organisch – und werden dadurch schnell unübersichtlich. Skript-Fragmente, Copy & Paste zwischen Projekten und individuelle Workarounds erschweren Wartung und Testing. Bei Motel One führte genau dieses Problem zu hoher Fehleranfälligkeit: Änderungen an der CI mussten in über 20 Services einzeln angepasst werden.
Die Lösung: eine Pipeline Toolbox – containerisiert, modular, über eine Shared CI wiederverwendbar.
Ausgangsproblem
Ein typisches Beispiel:
Trivy-Scan: prüft Docker-Images auf CVEs
Slack-Nachricht: verschickt Ergebnisse
Jira-Tickets: sollen automatisch aktualisiert werden
Der alte Ansatz sah (vereinfacht) so aus:
Problem: Jede Pipeline enthielt individuellen YAML-Code. Änderungen (z. B. Anpassungen an Trivy) bedeuteten, dass gleich 20+ Repositories angepasst und getestet werden mussten.
Idee & Ziel: Toolbox + Shared CI
Die Kernidee:
Toolbox (Docker-Image) → enthält Tasks wie JiraUpdateComponent, JiraAuditReportTrivy, SlackSend
Shared CI → bindet die Toolbox in allen Projekten ein indem es das Docker-Image der Toolbox mit Konfigurationsparametern aufruft.
Pipeline → importiert die geteilte Logik vom SHARED-CI
So entsteht eine klare Trennung:
Business-Logik im Docker-Container
CI/CD-Pipeline im geteilten Layer und im Projekt bleiben minimal
Beispiel (Shared CI):
Umsetzung der Toolbox
Die Toolbox ist in Deno/TypeScript geschrieben und folgt einer Task-basierten Architektur:
Branch-Struktur
main: Basis-Tasks
motel-one: inkl. Projektspezifischer Anpassungen (z. B. JiraUpdateComponent)
Feature-Branches: Teams können eigene Tasks hinzufügen
Beispiel-Tasks
JiraUpdateComponent
Liest Commit- oder MR-Namen
Extrahiert Jira-Issue-Key aus dem Commit oder dem Merge Request-Namen (ABC-123)
Aktualisiert Metadaten des Tickets automatisiert
JiraAuditReportTrivy
Scheduled Pipeline (cron: Montag, Dienstag und Donnerstag 9 Uhr)
Führt Trivy-Scan für eine App durch
Erstellt automatisch Jira-Tickets für jeder gefunden CVE statt nur Slack-Messages
SlackSend
Leichte Integration für Notifications an einen Slack Channel
Das Setting in der Praxis bei Motel One
Der Workflow heute:
Build & Push → Toolbox wird im GitLab Container Registry als Docker Image gespeichert
Shared CI → Nutzt dieses Docker Image and Runtime um die Businesslogik in der Pipeline auszuführen
Projekt-Pipeline → Importiert die Pipeline mit der Businesslogik aus dem Shared CI und übergibt Parameter
Vergleich:
Früher: Slack-Message → direkt in Pipeline per Bash
Heute: Slack-Message → geteilte Pipelines → Toolbox-Task SlackSend
→ Das gleiche gilt für Jira-Updates und CVE-Reports.
Herausforderungen der Umsetzung
Testing: Änderungen an Shared CI können alle Pipelines brechen → Lösung: Feature-Branch im Shared CI + projektweises Testen
Artefakte: Übergabe von JSON-Dateien zwischen Toolbox und Pipeline → Lösung via GitLab-API und Artefakt-Handling
Ausblick
Die Toolbox ist aktuell ein Proof of Concept. Die nächsten Schritte sehen wie folgt aus:
Refactoring der Code-Struktur
Beteiligung weiterer Entwickler:innen
Neue Tasks für die Toolbox
Fazit
Die Pipeline Toolbox bei Motel One zeigt, wie DevOps-Teams Komplexität reduzieren können:
Modularität durch Docker-Tasks
Wiederverwendbarkeit durch Shared CI
Automatisierung statt Copy & Paste
Das Ergebnis: Weniger Fehler. Schnellere Anpassungen. Eine zentrale Stelle für Weiterentwicklung und Optmierung in CI/CD Bereich. Mehr Fokus auf das Wesentliche. Das spart im Gesamten Zeit und Ressource, die an anderen Stellen im Projekt viel besser eingesetzt werden können.
Diesen Artikel teilen
