Sobes.tech
Middle

Quali sono le differenze tra artefatti e cache in GitLab CI come attributi del lavoro (job)?

sobes.tech AI

Risposta dell'AI

Gli artefatti e la cache in GitLab CI servono ad accelerare la compilazione e i test, ma svolgono funzioni diverse e hanno scopi differenti.

Artefatti (artifacts):

  • Scopo: Salvare i risultati di un task (build, test, documentazione, ecc.) per un uso o una visualizzazione successiva. Possono essere scaricati manualmente o accessibili tramite l'interfaccia web.
  • Durata di vita: Determinata dalla configurazione in .gitlab-ci.yml. Possono essere eliminati dopo un certo tempo o conservati.
  • Dimensione: Di solito più grande della cache, poiché contengono build pronti, report e altri risultati.
  • Utilizzo: Trasferire i risultati tra task in diverse fasi o per fornire agli utenti.

Esempio di configurazione:

artifacts:
  paths: # percorsi ai file e directory che diventeranno artefatti
    - build/
    - test-results.xml
  expire_in: 1 week # durata di vita degli artefatti

Cache (cache):

  • Scopo: Salvare le dipendenze del progetto o risultati intermedi per accelerare le esecuzioni successive dello stesso task. La cache è legata a un branch o tag specifico (può essere configurata).
  • Durata di vita: Gestita automaticamente da GitLab. Le vecchie cache vengono eliminate quando si supera la quota o scade il periodo di validità. La cache può essere ripristinata o creata automaticamente in una nuova esecuzione.
  • Dimensione: Di solito più piccola degli artefatti, poiché contiene dipendenze come repository Maven, pacchetti npm, ecc.
  • Utilizzo: Accelerare l'installazione delle dipendenze e ridurre i tempi di build.

Esempio di configurazione:

cache:
  paths: # percorsi alle directory che saranno cacheate
    - node_modules/
    - ~/.m2/repository/
  key: # chiave della cache, può usare variabili predefinite
    files:
      - package-lock.json # la cache verrà aggiornata se questo file cambia
    prefix: ${CI_COMMIT_REF_SLUG} # aggiunge un prefisso con il nome del branch/tag

Differenze chiave:

Caratteristica Artefatti (artifacts) Cache (cache)
Scopo Salvare risultati del task Salvare dipendenze per accelerare la compilazione
Utilizzo Download, trasferimento tra task (fasi diverse) Ripristino/creazione automatica
Durata di vita Esplicitamente definita in .gitlab-ci.yml Gestita da GitLab, eliminazione automatica
Accesso Tramite interfaccia web, API Utilizzato automaticamente dal Runner
Collegamento al branch Nessun collegamento diretto (se non esplicitamente indicato) Di solito legato al branch per isolamento

Quindi, gli artefatti sono i dati di output della compilazione, mentre la cache sono componenti riutilizzabili per accelerare la compilazione stessa.

job_example:
  stage: build
  script:
    - echo "Costruzione e test..."
    - mkdir build
    - echo "Risultato della build" > build/result.txt
    - echo "Installazione delle dipendenze"
  cache:
    paths:
      - dependency_dir/ # cartella con dipendenze, sarà cacheata
  artifacts:
    paths:
      - build/ # cartella build diventerà artefatto