Sobes.tech
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