Sobes.tech
Middle

Was sind die Unterschiede zwischen Artefakten und Cache in GitLab CI als Attribute eines Jobs?

sobes.tech KI

Antwort von AI

Artefakte und Cache in GitLab CI dienen dazu, den Build- und Testprozess zu beschleunigen, erfüllen jedoch unterschiedliche Funktionen und haben verschiedene Zwecke.

Artefakte (artifacts):

  • Zweck: Ergebnisse einer Aufgabe (Build, Tests, Dokumentation usw.) speichern, um sie später zu verwenden oder anzusehen. Sie können manuell heruntergeladen oder über die Weboberfläche zugänglich gemacht werden.
  • Lebensdauer: Wird durch die .gitlab-ci.yml-Konfiguration festgelegt. Sie können nach einer bestimmten Zeit gelöscht oder aufbewahrt werden.
  • Größe: In der Regel größer als der Cache, da sie fertige Builds, Berichte und andere Ergebnisse enthalten.
  • Verwendung: Ergebnisse zwischen Aufgaben in verschiedenen Phasen übertragen oder für Benutzer bereitstellen.

Beispiel für eine Konfiguration:

artifacts:
  paths: # Pfade zu Dateien und Verzeichnissen, die Artefakte werden
    - build/
    - test-results.xml
  expire_in: 1 week # Lebensdauer der Artefakte

Cache (cache):

  • Zweck: Abhängigkeiten des Projekts oder Zwischenergebnisse speichern, um die Ausführung derselben Aufgabe zu beschleunigen. Der Cache ist an einen bestimmten Branch oder Tag gebunden (kann konfiguriert werden).
  • Lebensdauer: Wird automatisch von GitLab verwaltet. Alte Cache-Einträge werden gelöscht, wenn das Kontingent überschritten wird oder die Gültigkeitsdauer abläuft. Der Cache kann bei einem neuen Lauf automatisch wiederhergestellt oder erstellt werden.
  • Größe: In der Regel kleiner als Artefakte, da er Abhängigkeiten wie Maven-Repositories, npm-Pakete usw. enthält.
  • Verwendung: Installation von Abhängigkeiten beschleunigen und die Build-Zeit verkürzen.

Beispiel für eine Konfiguration:

cache:
  paths: # Pfade zu Verzeichnissen, die gecached werden
    - node_modules/
    - ~/.m2/repository/
  key: # Cache-Schlüssel, kann vordefinierte Variablen verwenden
    files:
      - package-lock.json # Der Cache wird aktualisiert, wenn diese Datei geändert wird
    prefix: ${CI_COMMIT_REF_SLUG} # Fügt ein Präfix mit dem Namen des Branches/Tags hinzu

Wichtige Unterschiede:

Merkmal Artefakte (artifacts) Cache (cache)
Zweck Speicherung der Ergebnisse der Aufgabe Speicherung der Abhängigkeiten zur Beschleunigung der Builds
Verwendung Herunterladen, zwischen Aufgaben übertragen (verschiedene Phasen) Automatisches Wiederherstellen/Erstellen
Lebensdauer Explizit in .gitlab-ci.yml festgelegt Wird von GitLab verwaltet, automatische Löschung
Zugriff Über Web-Interface, API Automatisch vom Runner verwendet
Verbindung zum Branch Keine direkte Verbindung (außer explizit angegeben) Normalerweise an den Branch gebunden für Isolierung

Daher sind Artefakte die Ausgabedaten des Builds, während der Cache wiederverwendbare Komponenten zur Beschleunigung des Builds sind.

job_example:
  stage: build
  script:
    - echo "Build und Test"
    - mkdir build
    - echo "Build-Ergebnis" > build/result.txt
    - echo "Abhängigkeitsinstallation"
  cache:
    paths:
      - dependency_dir/ # Ordner mit Abhängigkeiten, wird gecached
  artifacts:
    paths:
      - build/ # Build-Ordner wird Artefakt