28 Einführung in GitLab Runner

Der GitLab Runner ist ein entscheidender Bestandteil von GitLab CI/CD, der dafür verantwortlich ist, CI/CD-Jobs auszuführen. Runner sind eigenständige Anwendungen, die auf physischen oder virtuellen Maschinen laufen und die in der .gitlab-ci.yml-Datei definierten Jobs verarbeiten. Sie ermöglichen die Automatisierung von Prozessen wie dem Bauen, Testen und Bereitstellen von Anwendungen.

In diesem Kapitel werden wir die Architektur, Funktionsweise und den Einsatz von GitLab Runnern detailliert erklären und die verschiedenen Möglichkeiten zur Konfiguration und Optimierung für unterschiedliche Umgebungen beleuchten.

28.1 Runner-Executor: Typen und Einsatzmöglichkeiten

Der GitLab Runner verwendet sogenannte Executors, um Jobs in verschiedenen Umgebungen auszuführen. Ein Executor bestimmt, wie und wo ein Job abgearbeitet wird, und bietet verschiedene Möglichkeiten, um sich an die Anforderungen des Projekts anzupassen.

28.1.1 Typen von Runner-Executors

  1. Shell-Executor: Führt Jobs direkt im Terminal des Hosts aus. Einfach einzurichten, aber begrenzt in der Isolation und Portabilität.
  2. Docker-Executor: Nutzt Container für jeden Job, was eine isolierte Umgebung bietet und die Portabilität erhöht.
  3. Docker-Compose-Executor: Ermöglicht die Verwendung von mehreren Docker-Containern für komplexere Setups.
  4. Kubernetes-Executor: Führt Jobs in Kubernetes-Pods aus, ideal für Cloud-native Anwendungen.
  5. SSH-Executor: Verwendet SSH, um Jobs auf einem entfernten Server auszuführen.
  6. Custom-Executor: Bietet die Möglichkeit, benutzerdefinierte Ausführungsumgebungen zu definieren.

28.1.2 Einsatzmöglichkeiten

Die Wahl des Executors hängt von den Anforderungen an Sicherheit, Portabilität, Isolierung und der zugrundeliegenden Infrastruktur ab:

28.2 Einrichtung und Konfiguration von GitLab Runnern

Die Einrichtung und Konfiguration eines GitLab Runners ist ein entscheidender Schritt, um eine funktionierende CI/CD-Pipeline zu ermöglichen. Der GitLab Runner führt die in der .gitlab-ci.yml definierten Jobs aus und kann auf verschiedenen Umgebungen, wie physischen oder virtuellen Maschinen, installiert werden. GitLab bietet verschiedene Runner-Typen: Shared, Group und Project Runner.

28.2.1 Installation des GitLab Runners

Die Installation des GitLab Runners variiert je nach Betriebssystem. Die häufigsten Betriebssysteme für GitLab Runner sind Linux, Windows und macOS. Für die Installation auf Linux-Systemen wird üblicherweise das offizielle GitLab-Repository verwendet. Nachdem der Runner installiert ist, kann er als Dienst gestartet werden. Detaillierte Installationsanweisungen finden sich in der offiziellen GitLab-Dokumentation, und es gibt auch spezifische Optionen für die Installation in Kubernetes oder über Docker.

28.2.2 Runner registrieren

Nachdem der GitLab Runner installiert wurde, muss er bei einem GitLab-Projekt, einer Gruppe oder einer Instanz registriert werden. Dies geschieht über den Befehl gitlab-runner register. Hierbei wird der Runner mit dem GitLab Server verbunden und erhält einen Token, der die Authentifizierung sicherstellt. Bei der Registrierung können auch zusätzliche Parameter festgelegt werden, wie der Executor-Typ (z.B. Docker, Shell, Kubernetes) und spezifische Tags, die den Jobs zugewiesen werden.

28.2.3 Konfiguration über die config.toml-Datei

Die Konfiguration des GitLab Runners erfolgt hauptsächlich über die Datei config.toml. Diese Datei enthält verschiedene Einstellungen, die das Verhalten des Runners steuern, einschließlich der Anzahl paralleler Jobs, der Verzeichnisstruktur für Builds und anderer Parameter. Diese Datei kann nach der Installation auf dem Hostsystem angepasst werden, um den Anforderungen der Umgebung gerecht zu werden.

28.2.4 Timeout und Ressourcenlimits festlegen

Für eine bessere Kontrolle über die Ausführung von Jobs können maximale Zeitlimits für Jobs (Job Timeout) und Ressourcennutzungen festgelegt werden. Dies ist besonders wichtig in großen Projekten, um sicherzustellen, dass keine unendlich laufenden Jobs Ressourcen blockieren. Diese Einstellungen können sowohl auf Instanz-, Gruppen- als auch Projektebene angepasst werden.

28.2.5 Sicherheit und Zugriffskontrolle

GitLab ermöglicht es, Runner für bestimmte Branches oder Tags zu beschränken, um sicherzustellen, dass Jobs nur auf bestimmten Runnern ausgeführt werden. Außerdem können sogenannte geschützte Runner konfiguriert werden, die nur in geschützten Branches oder Umgebungen verwendet werden dürfen. Dies bietet eine zusätzliche Sicherheitsebene für kritische Umgebungen wie Produktion.


Weitere Details und Anleitungen zu spezifischen Konfigurationsmöglichkeiten finden sich in der GitLab-Dokumentation.

28.3 Best Practices für die Verwendung von GitLab Runnern

Die effiziente und sichere Verwendung von GitLab Runnern erfordert eine sorgfältige Konfiguration und Verwaltung. Durch die Anwendung bewährter Praktiken kann die Performance der CI/CD-Pipelines verbessert, die Sicherheit erhöht und eine optimale Nutzung der Ressourcen sichergestellt werden.

28.3.1 Wahl des richtigen Executors

Die Wahl des passenden Executors hat einen erheblichen Einfluss auf die Flexibilität und Effizienz der CI/CD-Pipeline. Die gängigsten Executor-Typen und ihre optimalen Einsatzbereiche:

Vermeide den Einsatz des Shell-Executors für komplexe oder sicherheitskritische Anwendungen, da dieser keine Isolierung zwischen den Jobs bietet.

28.3.2 Richtige Nutzung von Caching und Artefakten

Caching und Artefakte spielen eine zentrale Rolle bei der Performance-Optimierung von Pipelines. Durch die Verwendung von Caches können Zwischenschritte, wie das Herunterladen von Abhängigkeiten, gespeichert und in nachfolgenden Jobs wiederverwendet werden.

Beispiel für den Cache:

cache:
  paths:
    - node_modules/

Artefakte ermöglichen das Speichern von Build-Outputs, die von anderen Jobs in der Pipeline verwendet werden. Dies reduziert die Notwendigkeit, dieselben Dateien in jedem Job neu zu generieren.

Beispiel für Artefakte:

artifacts:
  paths:
    - dist/

Achte darauf, dass Caches und Artefakte nicht unnötig groß werden, da dies die Performance der Pipeline beeinträchtigen kann. Nutze spezifische Pfade und definiere klare Speicherzeiträume.

28.3.3 Effiziente Nutzung von Runners durch Tags

Durch den Einsatz von Runner-Tags können Jobs gezielt auf bestimmte Runner verteilt werden. Dies ist besonders nützlich, wenn verschiedene Runner-Typen für unterschiedliche Aufgaben vorgesehen sind (z.B. Docker-Runner für Builds, Shell-Runner für einfache Skript-Jobs).

Beispiel für den Einsatz von Tags:

job_name:
  tags:
    - docker

Es ist ratsam, Tags konsistent und eindeutig zu verwenden, um eine klare Zuordnung der Jobs zu den entsprechenden Runnern sicherzustellen.

28.3.4 Skalierbarkeit und Ressourcenoptimierung

Eine effiziente Nutzung der Ressourcen ist entscheidend, besonders bei großen Projekten mit vielen parallelen Pipelines. GitLab Runner bietet Optionen zur Skalierung, insbesondere durch den Einsatz von Docker- und Kubernetes-Executors. Mit Auto-Scaling können zusätzliche Runner je nach Bedarf hinzugefügt oder entfernt werden, um Lastspitzen abzufangen.

Für die Ressourcenoptimierung sollten Timeouts und Limits für Jobs gesetzt werden, um zu verhindern, dass Jobs zu lange oder unkontrolliert laufen:

job_name:
  timeout: 20m

28.3.5 Sicherheitsmaßnahmen implementieren

Sicherheit ist ein wesentlicher Aspekt bei der Arbeit mit GitLab Runnern. Zu den Best Practices gehören:

Beispiel für geschützte Variablen:

variables:
  SECRET_API_KEY: "masked_key"
  protected: true

28.3.6 Überwachung und Protokollierung

Die Überwachung der Runner-Performance und die Protokollierung der Ausführung sind essenziell, um Engpässe und Fehler zu identifizieren. GitLab bietet umfangreiche Monitoring-Tools, die Runner-Logs und Metriken exportieren können, z.B. über Prometheus. Dies ermöglicht eine tiefgehende Analyse und Optimierung der Pipeline-Effizienz.