Forgejo Pipelines · Workshop Lektion 3 / Artifacts & Cache

Artifacts & Cache

Ergebnisse weitergeben – und Läufe beschleunigen. Zwei Dinge, die oft verwechselt werden.

Warum das zählt
Jobs laufen isoliert (Lektion 2). Damit ein Build-Ergebnis im nächsten Job ankommt oder ein Coverage-Report zum Download bereitsteht, brauchst du Artifacts. Damit pip install nicht jedes Mal alles neu lädt, brauchst du Cache. Beides sieht ähnlich aus, hat aber gegensätzliche Zwecke.

Der Unterschied in einem Satz

Artifact vs. Cache Artifact = ein Ergebnis, das ein Job erzeugt und an spätere Jobs oder zum Download weitergibt (Build, Report). Cache = wiederverwendbare Zwischendateien (Abhängigkeiten), die Läufe schneller machen, aber kein Ergebnis sind.

Artifacts: erzeugen und abholen

Ein Job lädt mit upload-artifact Dateien hoch, ein anderer holt sie mit download-artifact:

.forgejo/workflows/ci.yaml (Auszug)
  test:
    runs-on: docker
    container: python:3.12-slim
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements.txt
      - run: pytest --cov=app --cov-report=xml -q
      - uses: https://code.forgejo.org/forgejo/upload-artifact@v4
        with:
          name: coverage
          path: coverage.xml
Nicht die Standard-Action für Artifacts nehmen actions/upload-artifact@v4 aus dem Forgejo-Mirror funktioniert nicht. Nutze den gepatchten Fork https://code.forgejo.org/forgejo/upload-artifact@v4 (bzw. download-artifact) – oder bleib bei @v3. Voraussetzung: Forgejo 7.0+ und Runner 3.4+. Genau hier scheitern die meisten kopierten GitHub-Workflows.

Cache: Abhängigkeiten wiederverwenden

      - uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: pip-${{ hashFiles('requirements.txt') }}
      - run: pip install -r requirements.txt

Der key bestimmt die „Identität" des Caches. hashFiles(...) ändert ihn, sobald sich requirements.txt ändert – dann wird neu installiert und neu gecacht. Bleibt die Datei gleich, kommt der Cache aus dem Speicher: deutlich schneller.

Cache braucht einen Cache-Server am Runner actions/cache setzt voraus, dass der Forgejo-Runner einen Cache-Dienst anbietet. Fehlt der, scheitert die Action mit "Cache action is only supported on GHES version >= 3.5". Das ist Runner-Konfiguration – im Zweifel bei der Admin-Person nachfragen.

Parallelen: GitLab CI ↔ Forgejo Actions

GitLab CI

artifacts: & cache: als Keywords

Artifacts fliessen automatisch in spätere Stages

artifacts:reports: für Test-Widgets

Forgejo Actions

Beides sind Actions (uses:)

Artifact muss aktiv hoch- und runtergeladen werden

Report-Widgets sind schwächer ausgeprägt

Übungen für Teilnehmende

Übung 1 · Einordnen

Frage: Der gebaute dist/app.whl soll im Deploy-Job verfügbar sein. Artifact oder Cache?

Lösung anzeigen

Artifact – es ist ein Ergebnis, das ein anderer Job zwingend braucht. Cache wäre falsch: ein fehlender Cache ist nie ein Fehler, ein fehlendes Build-Ergebnis schon.

Übung 2 · Selbst schreiben

Aufgabe: Lade im build-Job das Verzeichnis dist/ als Artifact wheel hoch.

Lösung anzeigen
      - uses: https://code.forgejo.org/forgejo/upload-artifact@v4
        with:
          name: wheel
          path: dist/

Im Deploy-Job holst du es mit dem passenden download-artifact und demselben name wieder ab.

Kurz prüfen (aus dem Kopf)

Wofür ist ein Cache da?

Welche Artifact-Action funktioniert in Forgejo zuverlässig?

Primärquelle zum Lesen Forgejo Docs – Advanced features (Artifacts & Cache) sowie forgejo/upload-artifact.
Ich bin dein Teacher. Unsicher, ob etwas Artifact oder Cache ist? Schick mir deinen Fall – die Faustregel „brauche ich es zwingend?" klären wir gemeinsam.
← Lektion 2 · Jobs & needs Lektion 4 · env, vars & DRY →