Nach Jahren der Arbeit mit GitLab CI/CD in verschiedenen Projekten, hier fünf Praktiken die konstant schnellere, zuverlässigere Pipelines liefern.

1. Caching clever nutzen

Dependencies zwischen Jobs cachen um wiederholtes Herunterladen zu vermeiden:

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/
    - .npm/

Der key stellt sicher, dass verschiedene Branches separate Caches haben.

2. Tests parallelisieren

Test-Suite auf mehrere Jobs aufteilen:

test:
  parallel: 4
  script:
    - npm run test -- --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL

Das kann die Testzeit von 20 Minuten auf 5 Minuten reduzieren.

3. rules: statt only/except verwenden

Die neuere rules: Syntax ist mächtiger und lesbarer:

deploy:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: on_success
    - when: never

4. Docker Images optimieren

Kleine Base-Images und Multi-Stage Builds nutzen. Alpine-basierte Images können 10x kleiner sein als Ubuntu-basierte.

5. Schnell scheitern

Schnelle Checks (Linting, Formatierung) an den Anfang der Pipeline setzen. Kein Grund eine 20-minütige Test-Suite laufen zu lassen, wenn der Code nicht mal kompiliert.


Was sind eure liebsten CI/CD Optimierungen? Wir freuen uns davon zu hören.