Diese Serie von Beiträgen legt den Fokus auf die Entwicklungs- und Betriebsumgebung und beschreibt die technischen und organisatorischen Meilensteine der letzten Jahre.
Agile Entwicklung
Für die Entwicklung der Applikationen setzen wir agile Methoden wie Scrum oder Kanban ein. Diese schaffen einen organisatorischen Rahmen, in dem Entwickler effizient und flexibel an ihren Projekten arbeiten können.
Im Zentrum steht dabei die kontinuierliche Weiterentwicklung stabiler und getesteter Software in kurzen Iterationen – inklusive enger Abstimmung mit Qualitätssicherung und Produktmanagement. Um diese Ergebnisse sicher und reproduzierbar in den Produktivbetrieb auszurollen, muss der gesamte Lebenszyklus der Softwareartefakte automatisiert sein. Nur so lassen sich kurze Entwicklungszyklen mit hoher Auslieferungssicherheit vereinen.
CI/CD
Beim Bau der Software-Pakete ist es schon lange üblich, Systeme für Build- und Testautomatisierung wie Jenkins einzusetzen. Diese Tools automatisieren den Bau der Pakete und die Durchführung von Tests – in der Regel Unit-Tests. Eine formelle Beschreibung dieses Vorgehens ist in der Definition von Continuous Integration (CI) gegeben. Im Vordergrund stehen schnelles Feedback und die Sicherstellung eines integrierbaren Softwarestands.
Übersicht über den Workflow von CI/CD.
Die auf den Bau folgende Installation der Software in Test- und Produktiv-Umgebungen erfolgte lange Zeit manuell – ein aufwändiger und potenziell fehleranfälliger Prozess. Gerade bei wachsender Release-Frequenz und zunehmender Komplexität wird Automatisierung in diesem Bereich zur Voraussetzung für einen stabilen und nachvollziehbaren Betrieb.
Mit “Continuous Delivery (CD)” gibt es genau dafür einen geeigneten Rahmen, der auf zuverlässige, schnelle und wiederholbare Prozesse abzielt – bis hin zur automatisierten Auslieferung in definierte Zielumgebungen.
Umsetzung bei GMX und WEB.DE
Seit nun fast zehn Jahren arbeiten wir an der Umsetzung und Weiterentwicklung einer CI/CD-Plattform, die optimal auf die speziellen Anforderungen unserer Produkt- und Infrastrukturteams zugeschnitten ist. Die Entscheidung, zentrale Komponenten selbst zu entwickeln, folgt dabei unserem Anspruch, technologische Kontrolle und Gestaltungsfreiheit zu wahren. Gleichzeitig setzen wir an vielen Stellen etablierte Open- Source-Projekte ein und integrieren diese zu einem Gesamtsystem. Kern der Umgebung ist eine GitLab-Instanz zur Verwaltung des Quellcodes zusammen mit dem GitLab-CI-System, das Bau-, Test- und Installations-Prozesse automatisch ausführen kann. Standardisierte Pipelines für alle wesentlichen Schritte wie Unit-, Integration- und Akzeptanz-Tests, Container-Builds und Deployments erleichtern nicht nur die Einrichtung, sondern stellen auch die Einhaltung technischer und organisatorischer Vorgaben sicher.

Struktur eines Beispiel-Projekts. In .gitlab-ci.yml sind die Pipelines für CI/CD definiert und die dafür notwendigen Konfigurations-Variablen hinterlegt.
Für die Vielzahl verschiedener Projekttypen und vor allem die Unterstützung diverser Programmiersprachen sind die Pipeline-Vorlagen modular gestaltet. Daraus setzen die Entwickler mit geringem Aufwand eigene Pipelines zusammen, die exakt auf ihr Projekt zugeschnitten sind und gleichzeitig unseren übergreifenden Vorgaben entsprechen.
Auf dieser Basis können neue Projekte in wenigen Minuten erzeugt, gebaut und ausgerollt werden. Auch die Zyklen für das Testen und die Integration neuer Commits sind so optimal kurz und unterstützen die schnelle Lieferung von neuen Features.
Nachdem diese Build- bzw. CI-Phase erfolgreich abgeschlossen ist, können automatisch die Pipelines zum Ausrollen der Applikationen angestoßen werden. Diese “Continuous Delivery”-Phase liefert die Software schrittweise in die vorgesehenen Umgebungen aus. Auch hier kommen modulare Pipelines zum Einsatz, die leicht aus den jeweils benötigten Elementen zusammengesetzt werden können. Die Konfiguration wird in einem Satz hierarchisch aufgebauter Dateien festgelegt und während der Pipeline-Ausführung in die Templates übertragen.

So steuern die Pipelines die Installation in verschiedenen Umgebungen, zunächst nicht-produktive Testumgebungen, später Pilot- und Produktivumgebungen, jeweils auch parallel in mehreren Rechenzentren. Automatisierte, sowie in speziellen Fällen auch manuelle Tests stellen auch hier nach jedem Schritt die Funktionstüchtigkeit der Applikationen sicher, bevor die Installation in der nachfolgenden Umgebung stattfindet.
Die Plattform bietet damit eine einheitliche Grundlage für die kontinuierliche Auslieferung verschiedenartiger Projekte mit agilen Methoden entlang der Prinzipien von Continuous Integration und Continuous Delivery.

Dr. David Meder-Marouelli ist Experte für Continuous Delivery bei GMX und WEB.DE. Er ist Product Owner der Developer Platform, die eine standardisierte und automatisierte Softwareauslieferung ermöglicht.
Der nächste Teil der Serie widmet sich dem Entstehungsprozess der Kubernetes-Plattform von GMX und WEB.DE – heute eines der größten Setups dieser Art in Europa.