Sobes.tech
Middle

Jaké jsou rozdíly mezi artefakty a cache v GitLab CI jako atributy úlohy (job)?

sobes.tech AI

Odpověď od AI

Artefakty a cache v GitLab CI slouží ke zrychlení sestavení a testování, ale plní různé funkce a mají odlišné určení.

Artefakty (artifacts):

  • Účel: Uložení výsledků vykonané úlohy (sestavení, testy, dokumentace atd.) pro pozdější použití nebo zobrazení. Mohou být staženy ručně nebo dostupné přes webové rozhraní.
  • Doba životnosti: Je určena nastavením v .gitlab-ci.yml. Mohou být smazány po určité době nebo zachovány.
  • Velikost: Obvykle větší než cache, protože obsahují hotové sestavení, zprávy a další výsledky.
  • Použití: Přenos výsledků mezi úlohami v různých fázích nebo pro zpřístupnění uživatelům.

Příklad konfigurace:

artifacts:
  paths: # cesty k souborům a adresářům, které se stanou artefakty
    - build/
    - test-results.xml
  expire_in: 1 týden # doba životnosti artefaktů

Cache:

  • Účel: Uložení závislostí projektu nebo mezivýsledků pro urychlení následných spuštění téže úlohy. Cache je vázána na konkrétní větev nebo tag (lze nastavit).
  • Doba životnosti: Automaticky spravováno GitLabem. Staré záznamy cache jsou odstraňovány, když je překročena kvóta nebo vyprší doba platnosti. Cache může být automaticky obnoven nebo vytvořen při novém spuštění.
  • Velikost: Obvykle menší než artefakty, protože obsahuje závislosti typu Maven repozitářů, npm balíčků atd.
  • Použití: Zrychlení instalace závislostí a zkrácení doby sestavení.

Příklad konfigurace:

cache:
  paths: # cesty k adresářům, které budou cacheovány
    - node_modules/
    - ~/.m2/repository/
  key: # klíč cache, může používat předdefinované proměnné
    files:
      - package-lock.json # cache bude aktualizována při změně tohoto souboru
    prefix: ${CI_COMMIT_REF_SLUG} # přidává prefix s názvem větve/tagu

Klíčové rozdíly:

Vlastnost Artefakty (artifacts) Cache
Účel Uložení výstupů úlohy Uložení závislostí pro urychlení
Použití Stažení, předání mezi úlohami (různé fáze) Automatické obnovení/vytvoření
Doba životnosti Výslovně nastavena v .gitlab-ci.yml Řízeno GitLabem, automatické mazání
Přístup Přes webové rozhraní, API Automaticky používá Runner
Vazba na větev Není přímá vazba (není-li výslovně uvedeno) Obvykle je vázáno na větev pro izolaci

Tedy artefakty jsou výstupy sestavení, zatímco cache jsou opakovaně použitelné komponenty pro urychlení samotného sestavení.

job_example:
  stage: build
  script:
    - echo "Building and testing..."
    - mkdir build
    - echo "Build result" > build/result.txt
    - echo "dependency installation"
  cache:
    paths:
      - dependency_dir/ # složka s závislostmi, bude cacheována
  artifacts:
    paths:
      - build/ # složka build se stane artefaktem