Sobes.tech
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