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