GitLab CI/CD Grundstruktur
.gitlab-ci.yml steuert alle Pipelines:
Stages (Phasen in Reihenfolge):
build → Code kompilieren / Container bauen
test → Unit-Tests, Integration-Tests, Linting
deploy → Deployment in staging / production
Jobs:
Laufen in parallel innerhalb einer Stage
Jeder Job laeuft in einem Docker-Container
Runner:
Agents die Jobs ausfuehren
GitLab.com: Shared Runner (kostenlos 400 Min/Monat)
Selbst-Hosted Runner: unbegrenzt
Einfache Pipeline .gitlab-ci.yml
# .gitlab-ci.yml im Root des Repos
image: node:20-alpine
stages:
- install
- test
- build
- deploy
variables:
NODE_ENV: production
cache:
key: node-modules
paths:
- node_modules/
install:
stage: install
script:
- npm ci
artifacts:
paths:
- node_modules/
unit-tests:
stage: test
script:
- npm run test:unit -- --coverage
coverage: '/Liness*:s*(d+.d+)%/'
artifacts:
reports:
junit: test-results.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
build-docker:
stage: build
image: docker:24
services:
- docker:24-dind
script:
- docker login -u gitlab-ci-token -p GITLAB_CI_TOKEN registry.gitlab.com
- docker build -t registry.gitlab.com/meinefirma/meine-app:latest .
- docker push registry.gitlab.com/meinefirma/meine-app:latest
deploy-staging:
stage: deploy
environment:
name: staging
url: https://staging.meine-app.de
script:
- kubectl set image deployment/meine-app app=registry.gitlab.com/meinefirma/meine-app:latest -n staging
only:
- develop
deploy-production:
stage: deploy
environment:
name: production
url: https://meine-app.de
script:
- kubectl set image deployment/meine-app app=registry.gitlab.com/meinefirma/meine-app:latest -n production
when: manual
only:
- main
GitLab Runner selbst hosten
# GitLab Runner installieren (Debian/Ubuntu)
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
apt install gitlab-runner
# Runner registrieren
gitlab-runner register --url https://gitlab.com --token REGISTRATION_TOKEN --executor docker --docker-image docker:24 --description "Server Runner"
# Als Systemd-Service
systemctl enable --now gitlab-runner
# Runner-Status
gitlab-runner status
gitlab-runner list
FAQ
Brauche ich einen eigenen Runner oder reicht der GitLab.com Shared Runner?
Shared Runner: gut fuer kleine Projekte (400 min/Monat kostenlos). Eigener Runner: fuer haeufige Pipelines, lokalen Registry-Zugriff oder interne Kubernetes-Cluster.
Fazit
GitLab CI/CD ist eine der besten integrierten CI/CD-Loesungen: Container Registry, Environments, Security Scanning und Kubernetes-Integration in einer Plattform.
GitLab CI/CD fuer KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Beratung anfragen.