Continuous Integration/Delivery mit Docker und GitHub

 

Moderne DevOps-Umgebungen zeichnen sich dadurch aus, dass die Integration auf die Zielumgebung weitgehend automatisiert ist. Wenn Artefakte einer Software-Integration neben der Applikation selbst auch Komponenten weiterer Ebenen wie Webserver oder Datenbanken umfassen, bietet sich eine Docker-basierte Auslieferung und Integration speziell an.

Das hier illustrierte Beispiel aus einem Kundenprojekt umfasst im Wesentlichen ein Docker-Image basierend auf Debian, welches neben der Rails Web-Applikation ein Set von Cron-Jobs (zeitbasierte Ausführung von Tasks) enthält und auf eine externe Infrastruktur integriert wird.

 
screenshot_docker_registry.png
 

Build-Prozess von TeamCity per Push in die GitHub Container Registry

Die kontinuierliche Integration und der Auslieferungsprozess sind in der hier beschriebenen Lösung mit TeamCity realisiert worden. Als Artefakt resultiert ein Docker-Image, welches nach einem erfolgreichen Build und erfolgreich ausgeführten Tests und Code-Analysen per Push in die GitHub Registry kopiert wird.

Die GitHub Container Registry dient als Transfer-Ebene zwischen der Entwicklungs- und der Produktionsumgebung und ist über die Standardberechtigungs-Mechanismen zwischen uns und dem Kunden autorisiert.

Aktualisierung der Container-Registry auf Kundenseite per Pull

In der Zielinfrastruktur des Kunden sorgt Watchtower dafür, dass Container-Aktualisierungen in der GitHub Registry erkannt und per Pull in der internen Registry aktualisiert werden. In der Bereitstellung der Container erfolgt die Unterscheidung nach TEST und PROD auf der Basis des Release-Tags. Datenbank-Migrationsskripte werden zum Zeitpunkt des Container-Starts ausgeführt und stellen so die Kompatibilität der Änderungen sicher.

 
ci_cd_workflow.png
 

Fazit

Die kontinuierliche Auslieferung ist, speziell wenn sie hochgradig automatisiert ist, ein wertvolles Instrument für eine qualitativ einwandfreie Auslieferung der Releases. Der hier beschriebene Pfad zeigt, wie auch Docker-Artefakte in externe Umgebungen sicher, kontrolliert und ohne Reduktion des Automatisierungsgrades ausgeliefert werden können. Die vollständig gescriptete Integration stellt zudem eine für alle Beteiligten komplett dokumentierte Lösung dar.

 
Oliver Gut