Sobes.tech
Middle

Jakie są różnice między artefaktami a cache w GitLab CI jako atrybutami zadania (job)?

sobes.tech AI

Odpowiedź od AI

Artefakty i pamięć podręczna w GitLab CI służą do przyspieszania kompilacji i testów, ale pełnią różne funkcje i mają różne cele.

Artefakty (artifacts):

  • Cel: Zapisywanie wyników zadania (budowania, testów, dokumentacji itp.) do późniejszego użycia lub przeglądania. Mogą być pobierane ręcznie lub dostępne przez interfejs webowy.
  • Czas życia: Określany przez konfigurację w .gitlab-ci.yml. Mogą być usuwane po określonym czasie lub zachowywane.
  • Rozmiar: Zazwyczaj większy niż pamięć podręczna, ponieważ zawierają gotowe buildy, raporty i inne wyniki.
  • Użycie: Przekazywanie wyników między zadaniami w różnych etapach lub do udostępniania użytkownikom.

Przykład konfiguracji:

artifacts:
  paths: # ścieżki do plików i katalogów, które staną się artefaktami
    - build/
    - test-results.xml
  expire_in: 1 week # czas życia artefaktów

Pamięć podręczna (cache):

  • Cel: Zapisywanie zależności projektu lub wyników pośrednich w celu przyspieszenia kolejnych uruchomień tej samej zadania. Pamięć podręczna jest powiązana z określoną gałęzią lub tagiem (można skonfigurować).
  • Czas życia: Zarządzany automatycznie przez GitLab. Stare wpisy pamięci podręcznej są usuwane, gdy przekroczony jest limit lub wygasa okres ważności. Pamięć podręczna może być automatycznie przywracana lub tworzona przy nowym uruchomieniu.
  • Rozmiar: Zazwyczaj mniejszy niż artefakty, ponieważ zawiera zależności takie jak repozytoria Maven, pakiety npm itp.
  • Użycie: Przyspieszenie instalacji zależności i skrócenie czasu budowania.

Przykład konfiguracji:

cache:
  paths: # ścieżki do katalogów, które będą cache'owane
    - node_modules/
    - ~/.m2/repository/
  key: # klucz pamięci podręcznej, można używać zdefiniowanych zmiennych
    files:
      - package-lock.json # pamięć podręczna zostanie zaktualizowana, gdy ten plik się zmieni
    prefix: ${CI_COMMIT_REF_SLUG} # dodaje prefiks z nazwą gałęzi/taga

Kluczowe różnice:

Cecha Artefakty (artifacts) Pamięć podręczna (cache)
Cel Zapisywanie wyników zadania Zapisywanie zależności w celu przyspieszenia kompilacji
Użycie Pobieranie, przekazywanie między zadaniami (różne etapy) Automatyczne przywracanie/tworzenie
Czas życia Wyraźnie określony w .gitlab-ci.yml Zarządzany przez GitLab, automatyczne usuwanie
Dostęp Przez interfejs web, API Automatycznie używany przez Runnera
Związek z gałęzią Brak bezpośredniego powiązania (chyba że wyraźnie wskazane) Zazwyczaj powiązany z gałęzią dla izolacji

Tak więc, artefakty to dane wyjściowe kompilacji, a pamięć podręczna to komponenty wielokrotnego użytku przyspieszające sam proces kompilacji.

job_example:
  stage: build
  script:
    - echo "Budowa i testy..."
    - mkdir build
    - echo "Wynik build" > build/result.txt
    - echo "Instalacja zależności"
  cache:
    paths:
      - dependency_dir/ # folder z zależnościami, będzie cache'owany
  artifacts:
    paths:
      - build/ # folder build stanie się artefaktem