GitLab Runner ist die Execution-Engine von GitLab CI/CD – die Software, die tatsächlich Jobs ausführt. Während GitLab Server Pipelines orchestriert, clont Runner Code, führt Commands aus, reportet Results, und uploaded Artifacts. Ohne Runner keine CI/CD.
Dieses Kapitel erklärt Runner-Architektur, die verschiedenen Runner-Typen (Shared, Specific, Group), Executor-Typen (Shell, Docker, Kubernetes, etc.), Installation und Registration, Konfiguration, und Performance-Optimierung.
Wichtig: Runner sind nicht Teil des GitLab-Servers. Sie sind separate Prozesse/VMs/Container, die irgendwo laufen (eigene Server, Cloud, Developer-Laptop).
Kommunikation:
Flow im Detail:
1. Polling: Runner pollt GitLab API regelmäßig (jede Sekunde)
GET /api/v4/jobs/request
Authorization: Runner token
2. Job Assignment: GitLab matcht verfügbare Jobs mit Runner (basierend auf Tags)
{
"id": 456,
"name": "test-job",
"stage": "test",
"ref": "main",
"commands": ["npm install", "npm test"],
"variables": {...}
}3. Job Execution: - Runner clont Repository von Gitaly - Runner startet Executor (Shell, Docker, K8s) - Executor führt Commands aus - Stdout/Stderr wird gestreamt zu GitLab
4. Result Reporting:
{
"id": 456,
"state": "success",
"trace": "$ npm install\nadded 1347 packages\n$ npm test\n✓ all tests passed",
"artifacts": "artifacts.zip"
}Registrierung verbindet Runner mit GitLab-Instanz.
Process: 1. Runner generiert Registration-Request 2.
GitLab verifiziert Registration-Token 3. GitLab erstellt Runner-Eintrag
in DB 4. GitLab gibt Authentication-Token zurück 5. Runner speichert
Token in config.toml
Nach Registrierung: Runner pollt kontinuierlich für Jobs.
Definition: Verfügbar für alle Projekte in GitLab-Instanz.
GitLab.com: GitLab stellt kostenlose Shared Runners bereit: - Linux (Docker-Executor) - Windows (Docker-Executor) - macOS (Shell-Executor)
Self-Managed: Admin installiert und registriert Shared Runner.
Vorteile: - Sofort verfügbar (keine Installation) - Keine Maintenance (von GitLab managed) - Autoscaling (auf GitLab.com)
Nachteile: - Shared Resources (kann langsamer sein bei hoher Last) - Limits (CI/CD Minuten auf GitLab.com) - Weniger Kontrolle (Fixed Configuration)
Sichtbar in: Settings → CI/CD → Runners → Available shared runners
Definition: Registriert für spezifisches Projekt.
Use Case: Projekt braucht spezielle Hardware/Software: - GPU für ML-Training - Large Memory für Compilation - Spezifische Software (alte Linux-Version, proprietäre Tools) - Security (Runner in isoliertem Netzwerk)
Registration:
# Auf Runner-Maschine
gitlab-runner register \
--url https://gitlab.com/ \
--registration-token PROJECT_TOKEN \
--description "My GPU Runner" \
--tag-list "gpu,cuda" \
--executor docker \
--docker-image ubuntu:22.04Token: Settings → CI/CD → Runners → Specific runners → Registration token
Vorteile: - Volle Kontrolle (eigene Hardware) - Keine Limits (unbegrenzte CI/CD Minuten) - Custom Configuration
Nachteile: - Maintenance (Updates, Monitoring) - Kosten (eigene Hardware/Cloud-Instanzen)
Definition: Verfügbar für alle Projekte in einer Gruppe.
Use Case: Organization hat mehrere Projekte mit gemeinsamen Requirements: - Alle Frontend-Projekte nutzen selben Runner - Alle Backend-Projekte nutzen selben Runner
Registration: Wie Specific, aber auf Group-Level (Group → Settings → CI/CD → Runners)
Vorteile: - Shared zwischen Projekten (effizient) - Zentral managed (Update einmal, gilt für alle)
| Aspekt | Shared | Specific | Group |
|---|---|---|---|
| Verfügbar für | Alle Projekte | Ein Projekt | Alle Projekte in Group |
| Registration | Admin (Instance-Level) | Project-Maintainer | Group-Owner |
| Token | Instance Registration Token | Project Registration Token | Group Registration Token |
| Kosten | Free (mit Limits) | Eigene Hardware | Eigene Hardware |
| Kontrolle | Niedrig | Hoch | Hoch |
| Use Case | Standard CI/CD | Spezielle Hardware | Team-shared Resources |
Executor definiert wie Job ausgeführt wird.
Definition: Commands laufen direkt auf Runner-OS.
Setup:
gitlab-runner register \
--executor shellJob-Execution:
test:
script:
- npm install # Läuft direkt auf Runner-Maschine
- npm testWorking Directory:
/home/gitlab-runner/builds/$PROJECT_ID/
Vorteile: - Schnell (kein Container-Overhead) - Einfach (keine Docker-Installation nötig) - Direkter Zugriff auf Runner-Filesystem
Nachteile: - Keine Isolation (Job kann Runner-System modifizieren) - Cleanup nötig (Files bleiben nach Job) - Dependencies manuell installieren
Use Case: Legacy-Projekte, spezielle Hardware (GPU direkt), Performance-kritisch.
Security-Concern: Jobs können potentiell Runner kompromittieren.
Definition: Jeder Job läuft in fresh Docker-Container.
Setup:
gitlab-runner register \
--executor docker \
--docker-image alpine:latestJob-Execution:
test:
image: node:18-alpine # Job-spezifisches Image
script:
- npm install
- npm testWas passiert: 1. Runner pulled
node:18-alpine Image 2. Runner startet Container 3.
Container clont Repository 4. Commands laufen in Container 5. Container
wird destroyed
Vorteile: - Isolation: Jeder Job in fresh Environment - Reproduzierbar: Gleiche Image → gleiche Results - Clean: Kein Cleanup nötig (Container destroyed) - Flexibel: Verschiedene Images per Job
Nachteile: - Docker-Installation nötig auf Runner - Overhead (Image pull, Container start) - Privileged-Mode für Docker-in-Docker
Use Case: Standard CI/CD, meiste Projekte.
Docker-in-Docker (für Jobs, die selbst Docker nutzen):
build:
image: docker:24
services:
- docker:24-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
script:
- docker build -t myapp .Definition: Jobs laufen als Kubernetes-Pods.
Setup:
gitlab-runner register \
--executor kubernetes \
--kubernetes-host https://k8s-cluster.example.com \
--kubernetes-namespace gitlab-runnerconfig.toml:
[[runners]]
name = "k8s-runner"
url = "https://gitlab.com/"
token = "abc123"
executor = "kubernetes"
[runners.kubernetes]
host = "https://k8s-cluster.example.com"
namespace = "gitlab-runner"
image = "alpine:latest"
cpu_request = "100m"
memory_request = "128Mi"
cpu_limit = "1"
memory_limit = "1Gi"
service_cpu_request = "50m"
service_memory_request = "64Mi"Job-Execution:
test:
image: node:18-alpine
script:
- npm testWas passiert: 1. Runner erstellt Pod in Kubernetes 2. Pod pulled Image 3. Pod führt Commands aus 4. Pod wird deleted
Vorteile: - Cloud-Native: Nutzt K8s-Autoscaling - Isolation: Jeder Job in separate Pod - Resource-Limits: CPU/Memory per Job kontrollierbar - Hochskalierbar: Hunderte Jobs parallel
Nachteile: - Kubernetes-Cluster nötig - Komplexe Configuration - Overhead (Pod creation)
Use Case: Cloud-Native-Projects, large-scale CI/CD.
Definition: Dynamische VM-Creation für Jobs.
Idee: Runner erstellt VM on-demand (AWS EC2, DigitalOcean), führt Job aus, destroyed VM.
Status: Deprecated (Docker Machine project archived). Ersetzt durch Kubernetes Executor.
Definition: Jobs laufen in VirtualBox-VMs.
Use Case: Windows-CI/CD auf Linux-Runner, komplette Isolation.
Rarely used: Docker/Kubernetes sind besser.
Definition: Jobs laufen in Parallels-VMs (macOS).
Use Case: iOS/macOS-Builds.
Rarely used: Xcode Cloud oder macOS-Runner mit Shell-Executor sind üblicher.
Definition: Runner connected zu remote Machine via SSH, führt Commands dort aus.
Use Case: Legacy-Server ohne Runner-Installation.
Configuration:
[[runners]]
executor = "ssh"
[runners.ssh]
host = "remote-server.example.com"
port = 22
user = "gitlab-runner"
identity_file = "/home/gitlab-runner/.ssh/id_rsa"Definition: Custom Script definiert, wie Job ausgeführt wird.
Use Case: Sehr spezielle Requirements (z.B. Job auf physical Device ausführen).
Configuration:
[[runners]]
executor = "custom"
[runners.custom]
prepare_exec = "/path/to/prepare.sh"
run_exec = "/path/to/run.sh"
cleanup_exec = "/path/to/cleanup.sh"| Executor | Empfohlen für | Pros | Cons |
|---|---|---|---|
| Docker | ✅ Most Projects | Isolation, Reproduzierbar, Clean | Docker nötig |
| Kubernetes | ✅ Cloud-Native, Scale | Autoscaling, Resource-Control | Komplex |
| Shell | Legacy, Special Hardware | Schnell, Einfach | Keine Isolation |
| VirtualBox | Windows auf Linux | Isolation | Langsam |
| SSH | Legacy ohne Runner | Remote-Execution | Unsicher |
| Custom | Very Special Cases | Maximum Flexibility | Komplex |
Default-Empfehlung: Docker Executor.
1. Repository hinzufügen:
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash2. Install:
sudo apt-get install gitlab-runner3. Verify:
gitlab-runner --version
# Output: Version: 16.6.01. Download:
sudo curl -L --output /usr/local/bin/gitlab-runner \
"https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"2. Make executable:
sudo chmod +x /usr/local/bin/gitlab-runner3. Create user:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash4. Install and start service:
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner startHomebrew:
brew install gitlab-runner
brew services start gitlab-runner1. Download
gitlab-runner-windows-amd64.exe
2. Install als Service:
.\gitlab-runner-windows-amd64.exe install
.\gitlab-runner-windows-amd64.exe startRun Runner in Docker:
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latestWichtig: /var/run/docker.sock mounted →
Runner kann Docker-Containers starten (Docker-in-Docker).
Registration verbindet Runner mit GitLab.
Command:
sudo gitlab-runner registerPrompts:
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.com/
Enter the registration token:
abc123xyz789 # Von GitLab UI (Settings → CI/CD → Runners)
Enter a description for the runner:
my-docker-runner
Enter tags for the runner (comma-separated):
docker,linux
Enter optional maintenance note for the runner:
Production Docker Runner
Enter an executor: custom, docker, parallels, shell, ssh, virtualbox, docker+machine, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.7):
alpine:latest
Result: Runner registered, config.toml
created.
One-Liner:
sudo gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "abc123xyz789" \
--executor "docker" \
--docker-image alpine:latest \
--description "my-docker-runner" \
--tag-list "docker,linux" \
--run-untagged="false" \
--locked="false"Use Case: Automated Runner-Setup (Terraform, Ansible).
Project-Level:
Project → Settings → CI/CD → Runners → Specific runners
Registration token: abc123xyz789
Group-Level:
Group → Settings → CI/CD → Runners
Registration token: def456uvw012
Instance-Level (Admin only):
Admin Area → Overview → Runners
Registration token: ghi789rst345
config.toml)Location:
/etc/gitlab-runner/config.toml (Linux) oder
~/.gitlab-runner/config.toml
Structure:
concurrent = 4 # Max parallel jobs across all runners
check_interval = 3 # Polling interval (seconds)
[[runners]]
name = "my-docker-runner"
url = "https://gitlab.com/"
token = "abc123xyz"
executor = "docker"
[runners.cache]
Type = "s3"
Shared = true
[runners.cache.s3]
ServerAddress = "s3.amazonaws.com"
BucketName = "gitlab-runner-cache"
BucketLocation = "eu-central-1"
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0Concurrency:
concurrent = 10 # Max 10 Jobs parallel über alle RunnerPer-Runner Concurrency:
[[runners]]
limit = 5 # Dieser Runner max 5 Jobs parallelDocker-Volumes:
[runners.docker]
volumes = ["/cache", "/builds:/builds"]Docker-Privileged (für Docker-in-Docker):
[runners.docker]
privileged = trueDocker-Network:
[runners.docker]
network_mode = "host" # Oder "bridge", "none"Resource-Limits (Kubernetes):
[runners.kubernetes]
cpu_limit = "1"
memory_limit = "1Gi"
cpu_request = "100m"
memory_request = "128Mi"Tags matchen Jobs zu Runnern.
Bei Registration:
gitlab-runner register --tag-list "docker,linux,x86"In config.toml:
[[runners]]
tags = ["docker", "linux", "x86"]build:
tags:
- docker
- linux
script:
- make build
test:gpu:
tags:
- gpu
- cuda
script:
- python train_model.pyMatching-Regel: Job läuft auf Runner, der alle Tags hat.
Job build: Läuft auf Runner mit
docker AND linux Tags. Job
test:gpu: Läuft nur auf Runner mit
gpu AND cuda Tags.
Runner-Setting:
[[runners]]
run_untagged = true # Runner akzeptiert auch Jobs ohne TagsEmpfehlung: run_untagged = false für
Specific Runners (vermeidet unerwartete Job-Execution).
concurrent = 20 # 20 Jobs parallelHardware-Requirement: CPU/Memory muss ausreichen. Docker: 20 parallel Container → 20 GB RAM+ empfohlen.
S3-Cache:
[runners.cache]
Type = "s3"
Shared = true
[runners.cache.s3]
ServerAddress = "s3.amazonaws.com"
BucketName = "gitlab-runner-cache"
BucketLocation = "us-east-1"
AccessKey = "AKIAIOSFODNN7EXAMPLE"
SecretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCY"Shared = true: Cache shared zwischen Runnern (effizient für Cluster).
Problem: Job wartet auf Image-Pull.
Lösung: Pre-pull häufig genutzte Images:
docker pull node:18-alpine
docker pull python:3.11-slim
docker pull openjdk:17-jdk-slimCron-Job:
0 2 * * * docker pull node:18-alpine
0 2 * * * docker pull python:3.11-slimHorizontal Pod Autoscaler:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: gitlab-runner
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: gitlab-runner
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Effekt: Wenn CPU-Utilization > 70%, scale up (bis 10 Pods).
Command-Line:
gitlab-runner status
# Runtime platform: linux/amd64
# gitlab-runner: Service is running
gitlab-runner verify
# Verifying runner... is aliveAdmin Area (GitLab UI):
Admin Area → Overview → Runners
Runner #123: my-docker-runner
Status: ✓ online
Last contact: 2 seconds ago
Tags: docker, linux
Jobs run: 1,234
Runner exportiert Metrics:
http://runner-host:9252/metrics
Wichtige Metrics:
gitlab_runner_jobs{state="running"} # Aktuell laufende Jobs
gitlab_runner_jobs{state="waiting"} # Wartende Jobs in Queue
gitlab_runner_job_duration_seconds # Job-Duration
gitlab_runner_errors_total # Errors
Grafana-Dashboard: Visualisiert Runner-Performance, Queue-Length, Error-Rate.
Symptom: Admin Area zeigt “offline” (grau).
Diagnose:
gitlab-runner status
# Service is not runningFix:
sudo gitlab-runner startSymptom: Job startet nicht, Status “pending”.
Diagnose: - Kein Runner mit matching
Tags: Job hat tags: [gpu], aber kein Runner hat
gpu Tag. - Alle Runner busy:
concurrent Limit erreicht, alle Runner beschäftigt.
Fix: - Tags matchen - concurrent
erhöhen - Mehr Runner registrieren
Symptom:
ERROR: Job failed: failed to pull image "myimage:latest"
Diagnose: Runner kann Image nicht pullen (nicht existiert, keine Permissions).
Fix: - Image existiert verifizieren -
DOCKER_AUTH_CONFIG setzen (für private Registry)
Symptom: Job zeigt “This job is stuck”.
Diagnose: Kein Runner verfügbar (alle offline, Tags matchen nicht).
Fix: Runner starten, Tags fixen.
1. Separate Runner für verschiedene Workloads:
Runner 1: Tags [docker, linux] → Standard CI/CD
Runner 2: Tags [gpu, cuda] → ML-Training
Runner 3: Tags [windows] → Windows-Builds
2. Docker Executor für meiste Projekte: Isolation, Reproduzierbarkeit.
3. Monitoring setup: Prometheus + Grafana für Runner-Health.
4. Cache mit S3: Shared Cache für mehrere Runner.
5. Regular Updates:
sudo apt-get update
sudo apt-get install gitlab-runner6. Security: privileged = false wo
möglich, run_untagged = false für Specific Runners.
7. Resource-Limits (Kubernetes): CPU/Memory Limits prevent resource-exhaustion.
GitLab Runner ist die Execution-Engine, die Jobs ausführt:
Runner-Typen: - Shared: Für alle Projekte - Specific: Für ein Projekt - Group: Für alle Projekte in Group
Executor-Typen: - Docker: Empfohlen, Isolation, Reproduzierbar - Kubernetes: Cloud-Native, Autoscaling - Shell: Legacy, spezielle Hardware
Setup: - Installation (Package Manager, Binary,
Docker) - Registration (Interactive oder Non-Interactive) -
Configuration (config.toml)
Tags: Matchen Jobs zu Runnern
Performance: - Concurrent Jobs - Cache (S3) - Image Pre-Pulling - Autoscaling (Kubernetes)
Master Runner, und CI/CD wird von “waiting in queue” zu “instant execution at scale”.
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.
Die Wahl des Executors hängt von den Anforderungen an Sicherheit, Portabilität, Isolierung und der zugrundeliegenden Infrastruktur ab:
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.
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.
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.
config.toml-DateiDie 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.
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.
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.
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.
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.
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.
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:
- dockerEs ist ratsam, Tags konsistent und eindeutig zu verwenden, um eine klare Zuordnung der Jobs zu den entsprechenden Runnern sicherzustellen.
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: 20mSicherheit 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: trueDie Ü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.