GitLab ist mehr als nur ein Quellcode-Management-Tool – es stellt
eine umfassende DevOps-Plattform dar, die Continuous Integration (CI)
und Continuous Delivery (CD) nahtlos in den Entwicklungsprozess
integriert. Um die volle Leistungsfähigkeit von GitLab für CI/CD nutzen
zu können, ist es wichtig, die zugrunde liegende Architektur und die
Hauptkomponenten von GitLab zu verstehen.
18.1 Übersicht über die GitLab
Architektur
Die GitLab-Architektur ist so gestaltet, dass sie skalierbar und
flexibel ist, um sowohl für kleine als auch große Entwicklungsumgebungen
effizient zu arbeiten. Die Architektur besteht aus mehreren Schichten
und Komponenten, die in einem verteilten System miteinander
interagieren:
18.1.1 Hauptkomponenten von
GitLab
GitLab Web Interface (Puma/Rails):
Dies ist die Benutzeroberfläche, die den Entwicklern und
Administratoren den Zugriff auf alle GitLab-Funktionen ermöglicht. Es
ist in Ruby on Rails geschrieben und bildet das zentrale Bedienfeld von
GitLab.
Über das Web Interface können Benutzer Repositories verwalten,
Pipelines erstellen, Merge Requests initiieren und die
Projektfortschritte überwachen.
API:
Die GitLab-API stellt eine Programmierschnittstelle zur Verfügung,
die es ermöglicht, sämtliche GitLab-Funktionen programmgesteuert zu
nutzen. Dies ist besonders nützlich für die Automatisierung von
Prozessen oder die Integration mit anderen Tools.
Die API ist sowohl für Entwickler als auch für CI/CD-Tools der
zentrale Zugangspunkt für Interaktionen mit GitLab.
GitLab Workhorse:
Workhorse ist ein Reverse-Proxy-Server, der als Vermittler zwischen
der Web-Oberfläche und den Backend-Diensten von GitLab fungiert.
Es kümmert sich um die Auslieferung von großen Dateien, wie z.B.
Repositories, und sorgt für eine effiziente Kommunikation zwischen den
Komponenten.
Gitaly:
Gitaly ist ein spezieller Dienst zur Verwaltung von
Git-Repositories. Es wurde entwickelt, um die Performance von GitLab zu
verbessern und stellt eine API für den schnellen Zugriff auf Git-Daten
zur Verfügung.
Gitaly bearbeitet Anfragen zum Klonen, Pullen, Pushen und zur
Verwaltung von Branches und Tags.
GitLab Shell:
Diese Komponente erlaubt den direkten Zugriff auf Git-Repositories
über SSH. GitLab Shell verwaltet SSH-Schlüssel und authentifiziert
Benutzer für den Zugriff auf die Repositories.
Es ermöglicht eine sichere Kommunikation über das SSH-Protokoll und
bietet eine Schnittstelle für Befehle wie git clone oder
git push.
Sidekiq:
Sidekiq ist der Dienst, der für die Hintergrundverarbeitung in
GitLab verantwortlich ist. Alle nicht sofort erforderlichen Aufgaben
werden an Sidekiq übergeben, z.B. das Versenden von Benachrichtigungen,
das Verarbeiten von Webhooks oder das Starten von Pipelines.
Dies sorgt für eine hohe Performance der Weboberfläche, da
zeitaufwändige Aufgaben im Hintergrund abgearbeitet werden.
PostgreSQL:
GitLab nutzt PostgreSQL als relationale Datenbank, um alle
persistenten Daten zu speichern. Dazu gehören Benutzerkonten,
Projektinformationen, CI/CD-Konfigurationen und
Pipeline-Ergebnisse.
Eine robuste Datenbankstruktur sorgt dafür, dass GitLab effizient
arbeitet und alle Daten zuverlässig gespeichert werden.
Redis:
Redis fungiert als In-Memory-Datenbank, die für Caching und die
Verwaltung von Sitzungsdaten verwendet wird. Es sorgt für eine schnelle
Datenverarbeitung und ist ein Schlüsselelement für die Performance von
GitLab.
Redis wird auch zur Speicherung von temporären Daten genutzt, wie
z.B. Queues für Sidekiq-Jobs.
NGINX:
NGINX ist der Webserver und Reverse-Proxy, der Anfragen von HTTP und
HTTPS entgegennimmt und diese an GitLab Workhorse weiterleitet. Es
handelt sich um eine stark skalierbare Komponente, die für die sichere
und effiziente Auslieferung von Inhalten sorgt.
NGINX stellt sicher, dass die GitLab-Oberfläche schnell geladen wird
und schützt die Anwendung durch SSL/TLS.
GitLab Runner:
GitLab Runner ist eine eigenständige Komponente, die dafür
verantwortlich ist, CI/CD-Jobs auszuführen. Runner können entweder auf
dedizierten Servern oder in Cloud-Umgebungen installiert werden und
führen die im .gitlab-ci.yml definierten Jobs aus.
Die Flexibilität der GitLab Runner ermöglicht eine skalierbare
Pipeline-Ausführung, die an die Bedürfnisse des jeweiligen Projekts
angepasst werden kann.
18.2 Zusammenspiel der
Komponenten
Das Zusammenspiel der verschiedenen Komponenten von GitLab ist
entscheidend für die reibungslose Durchführung von CI/CD-Prozessen. Jede
Komponente hat eine klar definierte Aufgabe:
Die Benutzeroberfläche ermöglicht es den
Entwicklern, Pipelines zu definieren, Repositories zu verwalten und den
Status der CI/CD-Prozesse zu überwachen.
Workhorse, Gitaly und Shell sorgen für eine
effiziente Handhabung der Repositories und ermöglichen einen schnellen
Zugriff auf Git-Daten.
Sidekiq verarbeitet Hintergrundaufgaben, wie das
Starten von Pipelines, während PostgreSQL und Redis die
nötigen Daten speichern und abrufen.
NGINX fungiert als Tor zu GitLab, nimmt alle
Anfragen entgegen und sorgt für die sichere Kommunikation mit der
Plattform.
GitLab Runner führt schließlich die Jobs in den
Pipelines aus und stellt sicher, dass Builds, Tests und Deployments
effizient und automatisiert durchgeführt werden.
Diese modulare Architektur ermöglicht es GitLab, eine hochskalierbare
Plattform für CI/CD bereitzustellen, die in jeder Entwicklungsumgebung
eingesetzt werden kann. In den kommenden Kapiteln werden wir
detaillierter auf die spezifischen CI/CD-Funktionen eingehen und zeigen,
wie Sie diese Komponenten optimal nutzen können.