Middle
Care sunt diferențele dintre artefacte și cache în GitLab CI ca atribute ale sarcinii (job)?
sobes.tech AI
Răspuns de la AI
Artefactele și cache-ul în GitLab CI servesc pentru accelerarea compilării și testării, dar au funcții diferite și scopuri diferite.
Artefacte (artifacts):
- Scop: Salvarea rezultatelor unei sarcini (build, teste, documentație etc.) pentru utilizare sau vizualizare ulterioară. Pot fi descărcate manual sau accesate prin interfața web.
- Durata de viață: Determinată de configurația din
.gitlab-ci.yml. Pot fi șterse după o anumită perioadă sau păstrate. - Dimensiune: De obicei mai mari decât cache-ul, deoarece conțin build-uri gata, rapoarte și alte rezultate.
- Utilizare: Transferul rezultatelor între sarcini în diferite etape sau pentru furnizarea către utilizatori.
Exemplu de configurație:
artifacts:
paths: # căi către fișiere și directoare care vor deveni artefacte
- build/
- test-results.xml
expire_in: 1 week # durata de viață a artefactelor
Cache (cache):
- Scop: Salvarea dependențelor proiectului sau rezultatelor intermediare pentru accelerarea rulărilor ulterioare ale aceleiași sarcini. Cache-ul este legat de o anumită ramură sau etichetă (poate fi configurat).
- Durata de viață: Gestionată automat de GitLab. Înregistrările vechi de cache sunt șterse când se depășește cota sau expiră perioada de valabilitate. Cache-ul poate fi restaurat sau creat automat la o nouă rulare.
- Dimensiune: De obicei mai mic decât artefactele, deoarece conține dependențe precum depozite Maven, pachete npm etc.
- Utilizare: Accelerarea instalării dependențelor și reducerea timpului de build.
Exemplu de configurație:
cache:
paths: # căi către directoare care vor fi cache-uite
- node_modules/
- ~/.m2/repository/
key: # cheia cache-ului, poate folosi variabile predefinite
files:
- package-lock.json # cache-ul va fi actualizat dacă acest fișier se schimbă
prefix: ${CI_COMMIT_REF_SLUG} # adaugă un prefix cu numele ramurii/etichetei
Diferențe cheie:
| Caracteristică | Artefacte (artifacts) | Cache (cache) |
|---|---|---|
| Scop | Salvarea rezultatelor sarcinii | Salvarea dependințelor pentru accelerarea build-ului |
| Utilizare | Descărcare, transfer între sarcini (diferite etape) | Restaurare/creare automată |
| Durată de viață | Explicit definită în .gitlab-ci.yml |
Gestionată de GitLab, ștergere automată |
| Acces | Prin interfața web, API | Utilizat automat de către Runner |
| Legătură cu ramura | Fără legătură directă (dacă nu este indicată explicit) | De obicei legată de ramură pentru izolare |
Astfel, artefactele sunt datele de ieșire ale build-ului, iar cache-ul sunt componente reutilizabile pentru accelerarea build-ului în sine.
job_example:
stage: build
script:
- echo "Construire și testare..."
- mkdir build
- echo "Rezultatul build-ului" > build/result.txt
- echo "Instalare dependințe"
cache:
paths:
- dependency_dir/ # folder cu dependințe, va fi cache-uit
artifacts:
paths:
- build/ # folderul build va deveni artefact