Sobes.tech
Middle

Koje su razlike između artefakata i keša u GitLab CI kao atributa zadatka (job)?

sobes.tech АИ

Одговор од АИ

Artefakti i keš u GitLab CI služe za ubrzanje sastavljanja i testiranja, ali imaju različite funkcije i namenjene su za različite svrhe.

Artefakti (artifacts):

  • Svrha: Čuvanje rezultata izvršene zadatka (sastavljanje, testovi, dokumentacija itd.) za kasniju upotrebu ili pregled. Mogu biti preuzeti ručno ili dostupni putem veb interfejsa.
  • Vreme trajanja: Određuje se podešavanjima u .gitlab-ci.yml. Mogu biti obrisani nakon određenog vremena ili sačuvani.
  • Veličina: Obično veći od keša, jer sadrže gotove sastave, izveštaje i druge rezultate.
  • Upotreba: Prenos rezultata između zadataka u različitim fazama ili za pružanje korisnicima.

Primer konfiguracije:

artifacts:
  paths: # putanje do fajlova i direktorijuma koji će postati artefakti
    - build/
    - test-results.xml
  expire_in: 1 nedelja # vreme trajanja artefakata

Keš (cache):

  • Svrha: Čuvanje zavisnosti projekta ili međuzavisnih rezultata za ubrzanje narednih pokretanja iste zadatka. Keš je vezan za određenu granu ili oznaku (može se podesiti).
  • Vreme trajanja: Automatski se upravlja od strane GitLab-a. Stare zapise keša brišu se kada se prekorači kvota ili istekne rok trajanja. Keš može biti automatski obnovljen ili kreiran pri novom pokretanju.
  • Veličina: Obično manji od artefakata, jer sadrži zavisnosti poput Maven repozitorijuma, npm paketa itd.
  • Upotreba: Ubrzavanje instalacije zavisnosti i skraćivanje vremena sastavljanja.

Primer konfiguracije:

cache:
  paths: # putanje do direktorijuma koji će biti keširani
    - node_modules/
    - ~/.m2/repository/
  key: # ključ keša, može koristiti unapred definisane promenljive
    files:
      - package-lock.json # keš će se ažurirati promenom ovog fajla
    prefix: ${CI_COMMIT_REF_SLUG} # dodaje prefiks sa imenom grane/oznake

Ključne razlike:

Osobina Artefakti (artifacts) Keš (cache)
Svrha Čuvanje rezultata zadatka Čuvanje zavisnosti za ubrzanje
Upotreba Preuzimanje, prenošenje između zadataka (različite faze) Automatsko obnavljanje/kreiranje
Vreme trajanja Izričito podešeno u .gitlab-ci.yml Upravlja ga GitLab, automatsko brisanje
Pristup Kroz veb interfejs, API Automatski koristi Runner
Veza sa granom Nema direktnu vezu (ako nije izričito navedeno) Obično je vezano za granu radi izolacije

Tako, artefakti su izlazni podaci sastavljanja, dok je keš ponovo upotrebljivi sastavni delovi za ubrzanje samog sastavljanja.

job_example:
  stage: build
  script:
    - echo "Building and testing..."
    - mkdir build
    - echo "Build result" > build/result.txt
    - echo "dependency installation"
  cache:
    paths:
      - dependency_dir/ # folder sa zavisnostima, biće keširan
  artifacts:
    paths:
      - build/ # folder build biće artefakt