GitLab CI ist eines der leistungsstärksten, vollständig integrierten CI/CD-Systeme, die im Jahr 2026 verfügbar sind – keine externen Dienste erforderlich, Pipelines in einem einzigen.gitlab-ci.ymldefiniert Datei. Dieser Leitfaden erstellt eine vollständige Pipeline vom Testen bis zur Produktionsbereitstellung.
📋 Table of Contents
So funktioniert GitLab CI
GitLab CI führt Pipelines aus, die in.gitlab-ci.ymldefiniert sind in Ihrem Repo-Root. Jede Pipeline hatStufen (Testen, Erstellen, Bereitstellen), die nacheinander ausgeführt werden. Innerhalb einer PhaseArbeitsplätze parallel laufen. Jobs werden amausgeführt Läufer (GitLab-gehostet oder selbst gehostet).
Grundlegende Pipeline-Struktur
# .gitlab-ci.yml
stages:
- test
- build
- deploy
variables:
NODE_VERSION: "20"
# Test stage
test:
stage: test
image: node:20-alpine
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules/
script:
- npm ci
- npm run lint
- npm run test:coverage
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
Bühne mit Docker erstellen
build:
stage: build
image: docker:24
services:
- docker:24-dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
script:
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" .
- docker tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" "$CI_REGISTRY_IMAGE:latest"
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
- docker push "$CI_REGISTRY_IMAGE:latest"
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
Bereitstellungsphase mit Umgebungen
deploy_production:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
script:
- ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$PROD_HOST
"cd /app && docker compose pull && docker compose up -d"
environment:
name: production
url: https://example.com
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual # require manual approval for production
Caching für schnellere Pipelines
cache:
key:
files:
- package-lock.json # cache invalidates when lockfile changes
paths:
- node_modules/
- .npm/
# Python: paths: [.cache/pip, venv/]
# Go: paths: [.go/pkg/mod/]
# Rust: paths: [target/, .cargo/]
Parallele Matrix-Builds
test:
stage: test
parallel:
matrix:
- NODE_VERSION: ["18", "20", "22"]
image: node:$NODE_VERSION-alpine
script:
- npm ci
- npm test
# Runs 3 parallel jobs testing against Node 18, 20, 22
Geheimnisse und Variablen verwalten
Kodieren Sie niemals Geheimnisse fest. Speichern Sie sie inEinstellungen, dann CI/CD, dann Variablen:
- Markieren Sie sensible Werte alsMaskiert (in Protokollen versteckt)
- Markieren Sie Bereitstellungsgeheimnisse alsGeschützt (nur in geschützten Zweigen verfügbar)
- Verwenden SieUmgebungsbereiche für unterschiedliche Staging- und Produktionswerte
Tipps zur Pipeline-Optimierung
- Verwenden Sie
needs:um Jobs außerhalb der Phasenreihenfolge auszuführen, wenn Abhängigkeiten dies zulassen - Verwenden Sie
rules:stattonly/except(moderner, flexibler) - Verwenden Sie
interruptible: truealso löschen neue Vorstöße veraltete Pipelines - Aggressiv zwischenspeichern — Die Abhängigkeitsinstallation ist oft der langsamste Schritt
- Verwenden Sie kleine Basisbilder (alpine Varianten) für schnelleren Jobstart
Häufig gestellte Fragen
F: GitLab CI vs. GitHub-Aktionen?
A: GitLab CI ist vollständig in GitLab integriert (Registrierung, Umgebungen, Sicherheitsscans integriert). GitHub Actions verfügt über einen größeren Marktplatz mit vorgefertigten Aktionen. Beide sind ausgezeichnet; Wählen Sie basierend darauf, wo sich Ihr Code befindet.
F: Benötige ich selbst gehostete Läufer?
A: Von GitLab gehostete Runner funktionieren für die meisten Projekte. Selbstgehostete Läufer lohnen sich bei hoher Arbeitslast, spezifischer Hardware oder privatem Netzwerkzugriff.
F: Wie beschleunige ich langsame Pipelines?
A: Cache-Abhängigkeiten, verwenden Sieneeds: Verwenden Sie für die parallele Ausführung kleinere Docker-Images und teilen Sie Testsuiten mitparallel:auf . Profilieren Sie zuerst die langsamsten Jobs.
F: Wie gehe ich mit Datenbankmigrationen in der Pipeline um?
A: Führen Sie Migrationen als Job in der Bereitstellungsphase aus, bevor Sie die App neu starten. Testen Sie Migrationen im Staging immer zuerst mit einer produktionsähnlichen Datenbank.
F: Cache vs. Artefakte – was ist der Unterschied?
A: cache Beschleunigt Jobs durch die Wiederverwendung von Dateien über mehrere Läufe hinweg (nicht garantiert). artifacts Übergeben Sie Dateien zwischen Phasen innerhalb einer Pipeline (garantiert).
Fazit
GitLab CI bietet ein vollständiges, integriertes CI/CD-System in einer einzigen YAML-Datei. Die Pipeline hier – mit Abdeckung testen, Docker-Images erstellen und pushen, mit manueller Genehmigung in der Produktion bereitstellen – deckt den gesamten Workflow für die meisten Anwendungen ab. Beginnen Sie mit einer Testphase, fügen Sie Builds und Bereitstellungen schrittweise hinzu und optimieren Sie sie mit Caching und parallelen Jobs, wenn Ihre Pipeline wächst.
🔗 Share this article
✍️ Leave a Comment