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