CI/CD mit GitLab
Übersicht
GitLab CI/CD ermöglicht automatisierte Build-, Test- und Deployment-Prozesse direkt aus dem Git-Repository. Die Pipeline-Konfiguration erfolgt über die .gitlab-ci.yml Datei im Repository-Root.
Grundlagen
Stages
Pipelines sind in Stages organisiert, die sequenziell ablaufen. Jobs innerhalb einer Stage laufen parallel.
stages:
- build
- deployJobs
Jobs definieren konkrete Aufgaben innerhalb einer Stage:
job_name:
stage: build
script:
- echo "Build commands"
only:
- masterRunner
GitLab Runner führen die Pipeline-Jobs aus.
Verfügbare Runner (Instance-Level)
Alle Runner sind selbst gehostet und als Instance Runner konfiguriert:
| Runner | Plattform | Version | Jobs ausgeführt | Status |
|---|---|---|---|---|
build-docker01 | Docker | Latest | 734 | Online |
build-ubuntu-2404-64 | Ubuntu 24.04 | Latest | 759 | Online |
build-debian-12-64 | Debian 12 | 18.5.0 | 56 | Online |
build-ubuntu-2204-64 | Ubuntu 22.04 | 18.5.0 | 1000+ | Online |
build-windows-10-64 | Windows 10 | 18.5.0 | 499 | Online |
build-debian-11-64 | Debian 11 | 18.5.0 | 196 | Online |
build-ubuntu-2004-64 | Ubuntu 20.04 | 18.5.0 | 1000+ | Online |
Empfehlungen:
- Docker-Builds:
build-docker01 - PHP/Composer:
build-ubuntu-2204-64oderbuild-ubuntu-2404-64 - Windows-Builds:
build-windows-10-64 - Legacy-Projekte: Passende Debian/Ubuntu Version wählen
Runner-Auswahl in Jobs:
job_name:
tags:
- build-ubuntu-2204-64
script:
- ./build.shArtifacts
Artifacts sind Dateien, die zwischen Jobs weitergegeben werden:
build:
script:
- make build
artifacts:
paths:
- build/
expire_in: 1 weekCache
Cache beschleunigt Builds durch Wiederverwendung von Dependencies:
cache:
paths:
- node_modules/
- vendor/Variables
Umgebungsvariablen für Konfiguration und Secrets:
variables:
DATABASE_URL: "postgres://localhost"Sensitive Daten werden in GitLab UI unter Settings → CI/CD → Variables verwaltet.
Deployment-Strategien
Branch-basiertes Deployment
master→ Development/Staging- Tags (z.B.
v1.0.0) → Production - Feature Branches → Review Apps (via MR Staging)
Environment-basiert
deploy_staging:
stage: deploy
script:
- deploy-script staging
environment:
name: staging
url: https://staging.example.com
only:
- develop
deploy_production:
stage: deploy
script:
- deploy-script production
environment:
name: production
url: https://example.com
only:
- tags
when: manualGitLab Components
GitLab Components sind wiederverwendbare CI/CD-Bausteine, die in mehreren Projekten eingesetzt werden können. Die ITeas-eigenen Components sind im Repository gitlab-components verfügbar.
Components werden über include in die .gitlab-ci.yml eingebunden:
include:
- component: git.styrion.net/iteas/gitlab-components/<component-name>@main
inputs:
# component-spezifische InputsVerfügbare Components
| Component | Beschreibung | Dokumentation |
|---|---|---|
mr-staging | Review Apps für Merge Requests auf einem Staging-Server | MR Staging |
vault-secrets | Secrets aus HashiCorp Vault in die Pipeline laden | Vault Secrets |
vault-ssh | SSH-Keys über Vault generieren und signieren | Vault SSH |
code-signing | Authenticode-Signierung von Windows-Binaries via Azure Trusted Signing | Code Signing |
Best Practices
Pipeline-Optimierung
- Cache für Dependencies nutzen
- Artifacts nur für notwendige Dateien
- Jobs parallelisieren wo möglich
- Docker Images verwenden für konsistente Umgebungen
Sicherheit
- Secrets niemals in
.gitlab-ci.ymlhardcoden – stattdessen Vault Secrets verwenden - Protected Variables für sensible Daten
- Protected Branches für Production-Deployments
- Manual approval für kritische Deployments
- SSH-Keys nicht statisch speichern – stattdessen Vault SSH nutzen
Debugging
job_name:
script:
- echo "Debug output"
artifacts:
when: on_failure
paths:
- logs/Bedingungen
job_name:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
- when: neverPipeline-Trigger
Automatisch
- Push zu Branch
- Merge Request (mit Labels für spezifische Jobs)
- Tag erstellen
Manuell
deploy:
when: manualScheduled
Pipelines können zeitgesteuert über CI/CD → Schedules ausgeführt werden.
Monitoring
Pipeline-Status
- Pipeline-Übersicht: CI/CD → Pipelines
- Job-Logs: Klick auf Job in Pipeline-Ansicht
- Environment-Status: Operations → Environments (inkl. Review-App-URLs)
Notifications
Konfigurierbar unter Settings → Integrations:
- Slack
- Microsoft Teams
- Webhooks
Weitere Ressourcen
- GitLab CI/CD Documentation
- .gitlab-ci.yml Reference
- ITeas GitLab Components
- Projekt-spezifische Pipeline-Konfiguration:
/.gitlab-ci.yml
