Middle
Wat zijn de verschillen tussen artefacten en cache in GitLab CI als attributen van een taak (job)?
sobes.tech AI
Antwoord van AI
Artefacten en cache in GitLab CI dienen om het bouwen en testen te versnellen, maar vervullen verschillende functies en hebben verschillende doeleinden.
Artefacten (artifacts):
- Doel: Het opslaan van de resultaten van een taak (build, tests, documentatie, etc.) voor later gebruik of bekijken. Ze kunnen handmatig worden gedownload of via de webinterface toegankelijk zijn.
- Levensduur: Bepaald door de configuratie in
.gitlab-ci.yml. Ze kunnen na een bepaalde tijd worden verwijderd of bewaard. - Grootte: Over het algemeen groter dan de cache, omdat ze kant-en-klare builds, rapporten en andere resultaten bevatten.
- Gebruik: Resultaten tussen taken in verschillende fasen overdragen of aan gebruikers tonen.
Voorbeeld van configuratie:
artifacts:
paths: # paden naar bestanden en mappen die artefacten worden
- build/
- test-results.xml
expire_in: 1 week # levensduur van artefacten
Cache (cache):
- Doel: Het opslaan van projectafhankelijkheden of tussenresultaten om latere uitvoeringen van dezelfde taak te versnellen. De cache is gekoppeld aan een specifieke tak of tag (kan worden geconfigureerd).
- Levensduur: Automatisch beheerd door GitLab. Oude cache-invoeren worden verwijderd wanneer de quota wordt overschreden of de vervaldatum is verlopen. De cache kan automatisch worden hersteld of gemaakt bij een nieuwe uitvoering.
- Grootte: Over het algemeen kleiner dan artefacten, omdat het afhankelijkheden bevat zoals Maven-repositories, npm-pakketten, etc.
- Gebruik: Het versnellen van de installatie van afhankelijkheden en het verkorten van de bouwtijd.
Voorbeeld van configuratie:
cache:
paths: # paden naar te cachen mappen
- node_modules/
- ~/.m2/repository/
key: # cache-sleutel, kan vooraf gedefinieerde variabelen gebruiken
files:
- package-lock.json # de cache wordt bijgewerkt als dit bestand wijzigt
prefix: ${CI_COMMIT_REF_SLUG} # voegt een prefix toe met de naam van de tak/tag
Belangrijkste verschillen:
| Kenmerk | Artefacten (artifacts) | Cache (cache) |
|---|---|---|
| Doel | Opslaan van resultaten van de taak | Opslaan van afhankelijkheden om de bouw te versnellen |
| Gebruik | Downloaden, overdragen tussen taken (verschillende fasen) | Automatisch herstellen/aanmaken |
| Levensduur | Expliciet ingesteld in .gitlab-ci.yml |
Beheerd door GitLab, automatische verwijdering |
| Toegang | Via webinterface, API | Automatisch gebruikt door de Runner |
| Relatie met tak | Geen directe koppeling (tenzij expliciet aangegeven) | Meestal gekoppeld aan de tak voor isolatie |
Dus, artefacten zijn de outputgegevens van de build, en cache zijn herbruikbare componenten om de build zelf te versnellen.
job_example:
stage: build
script:
- echo "Bouwen en testen..."
- mkdir build
- echo "Build resultaat" > build/result.txt
- echo "Afhankelijkheden installeren"
cache:
paths:
- dependency_dir/ # map met afhankelijkheden, wordt gecached
artifacts:
paths:
- build/ # build map wordt artefact