GitLab Pipelines · Workshop Lektion 3 / Artifacts & Cache

Artifacts & Cache

Ergebnisse weitergeben – und Pipelines schneller machen.

Warum das zählt
Jobs sind isoliert: Was ein Job erzeugt, ist im nächsten standardmässig weg. Artifacts geben Ergebnisse weiter, Cache spart Zeit. Diese beiden zu verwechseln ist der häufigste Anfängerfehler – und ein perfekter Workshop-Moment.

Kurzer Rückruf

Wovon hängt ab, ob der nächste Stage startet?

Das Problem: Jobs vergessen alles

Jeder Job startet in einem frischen Container. Lädt pytest Dependencies herunter, sind sie für den nächsten Job verschwunden. Erzeugt es einen Coverage-Report, sieht ihn niemand. Zwei Keywords lösen zwei verschiedene Probleme:

artifacts cache
ZweckErgebnis weitergebenDateien wiederverwenden
BeispielCoverage-Report, Build-Outputheruntergeladene pip-Pakete
Verlässlich da?Ja (nach grünem Job)Nein – nur ein Beschleuniger
Sichtbar in UI?Ja, herunterladbarNein

Artifacts: den Coverage-Report weitergeben

pytest:
  stage: test
  script:
    - pip install -r requirements.txt pytest-cov
    - pytest --cov=app --cov-report=xml --junitxml=report.xml
  artifacts:
    paths:
      - coverage.xml
    reports:
      junit: report.xml      # GitLab zeigt Testergebnisse im MR an
    expire_in: 1 week      # nach 1 Woche automatisch gelöscht

paths: sind Dateien zum Download. reports: sind spezielle Artifacts, die GitLab versteht und im Merge Request aufbereitet (z. B. Test- und Coverage-Reports).

Cache: pip-Downloads wiederverwenden

pytest:
  stage: test
  variables:
    PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip-cache"
  cache:
    key:
      files:
        - requirements.txt          # neuer Cache nur bei Änderung
    paths:
      - .pip-cache/
  script:
    - pip install -r requirements.txt && pytest -q
Cache-Key clever wählen Mit key: files: [requirements.txt] bekommst du einen neuen Cache nur, wenn sich die Dependencies ändern. So bleibt der Cache aktuell, ohne ihn ständig neu aufzubauen.
Dein Win Du weisst jetzt, welches Keyword wann gehört: Etwas weitergeben → artifacts. Etwas beschleunigen → cache.

Besonderheiten & Stolperfallen

Cache ist nicht garantiert Der Cache kann fehlen (anderer Runner, abgelaufen, gelöscht). Deine Pipeline muss auch ohne Cache korrekt durchlaufen – er darf nie Voraussetzung für Korrektheit sein, nur für Tempo.
Artifacts nur bei Erfolg – ausser du sagst etwas anderes Standardmässig werden Artifacts nur von grünen Jobs hochgeladen. Willst du z. B. Logs eines fehlgeschlagenen Jobs sichern, brauchst du artifacts: when: always.
Cache liegt im Projektverzeichnis Gecachte Pfade müssen innerhalb von $CI_PROJECT_DIR liegen. Ein systemweiter Pfad wie /root/.cache lässt sich nicht direkt cachen – deshalb lenken wir PIP_CACHE_DIR ins Projekt um.
Artifacts kosten Speicher Ohne expire_in sammeln sich Artifacts an und füllen den Projekt-Speicher. Im Workshop ein gern vergessener Punkt – immer ein Ablaufdatum setzen.

Übung für Teilnehmende

Übung 1 · Einordnen

Frage: Der build-Job erzeugt ein Wheel (dist/*.whl), das der deploy-Job installieren soll. Artifact oder Cache?

Lösung anzeigen

Artifact. Das Wheel ist ein Ergebnis, das verlässlich an einen späteren Job weitergegeben werden muss – genau die Aufgabe von artifacts: paths: [dist/]. Ein Cache wäre falsch, weil er fehlen darf.

Übung 2 · Selbst schreiben

Aufgabe: Ergänze den build-Job so, dass er den Ordner dist/ als Artifact mit Ablauf nach 3 Tagen weitergibt.

Lösung anzeigen
build:
  stage: build
  script:
    - pip install build && python -m build
  artifacts:
    paths:
      - dist/
    expire_in: 3 days
Übung 3 · Debuggen

Szenario: Ein Kollege cached /usr/local/lib/python3.12 und wundert sich, dass nichts schneller wird. Was ist falsch?

Lösung anzeigen

Der Pfad liegt ausserhalb von $CI_PROJECT_DIR und kann gar nicht gecacht werden. Richtig: PIP_CACHE_DIR ins Projektverzeichnis umlenken und diesen Ordner cachen.

Kurz prüfen (aus dem Kopf)

Worauf darfst du dich bei Korrektheit niemals verlassen?

Wie sicherst du Logs eines fehlgeschlagenen Jobs?

Primärquelle zum Lesen GitLab Docs – Caching in GitLab CI/CD. Enthält den wichtigen Vergleich „cache vs. artifacts" und Cache-Strategien.
Frag deinen Teacher. Unklar, wann sich reports: lohnt oder wie man Caches teilt? Schreib mir.
← Lektion 2 Lektion 4 · Variables & DRY →