Sobes.tech
Middle

Quelles sont les différences entre artefacts et cache dans GitLab CI en tant qu'attributs de tâche (job) ?

sobes.tech IA

Réponse de l'IA

Les artefacts et le cache dans GitLab CI servent à accélérer la compilation et les tests, mais remplissent des fonctions différentes et ont des objectifs distincts.

Artefacts (artifacts):

  • Objectif: Sauvegarder les résultats de l'exécution d'une tâche (build, tests, documentation, etc.) pour une utilisation ou une visualisation ultérieure. Ils peuvent être téléchargés manuellement ou accessibles via l'interface web.
  • Durée de vie: Définie par la configuration dans .gitlab-ci.yml. Ils peuvent être supprimés après un certain temps ou conservés.
  • Taille: Généralement plus grande que le cache, car ils contiennent des builds prêts, des rapports et d'autres résultats.
  • Utilisation: Transférer les résultats entre les tâches dans différentes étapes ou pour fournir aux utilisateurs.

Exemple de configuration:

artifacts:
  paths: # chemins vers les fichiers et répertoires qui deviendront des artefacts
    - build/
    - test-results.xml
  expire_in: 1 week # durée de vie des artefacts

Cache (cache):

  • Objectif: Sauvegarder les dépendances du projet ou les résultats intermédiaires pour accélérer les exécutions ultérieures d'une même tâche. Le cache est lié à une branche ou une étiquette spécifique (peut être configuré).
  • Durée de vie: Gérée automatiquement par GitLab. Les anciennes entrées de cache sont supprimées lorsque le quota est dépassé ou que la durée de validité expire. Le cache peut être restauré ou créé automatiquement lors d'une nouvelle exécution.
  • Taille: Généralement plus petite que les artefacts, car il contient des dépendances comme des dépôts Maven, des paquets npm, etc.
  • Utilisation: Accélérer l'installation des dépendances et réduire le temps de build.

Exemple de configuration:

cache:
  paths: # chemins vers les répertoires qui seront mis en cache
    - node_modules/
    - ~/.m2/repository/
  key: # clé de cache, peut utiliser des variables prédéfinies
    files:
      - package-lock.json # le cache sera mis à jour si ce fichier change
    prefix: ${CI_COMMIT_REF_SLUG} # ajoute un préfixe avec le nom de la branche/étiquette

Différences clés:

Caractéristique Artefacts (artifacts) Cache (cache)
Objectif Sauvegarde résultats de la tâche Sauvegarde dépendances pour accélérer la compilation
Utilisation Téléchargement, transfert entre tâches (différentes étapes) Restauration/création automatique
Durée de vie Spécifiée explicitement dans .gitlab-ci.yml Gérée par GitLab, suppression automatique
Accès Via l'interface web, API Utilisé automatiquement par le Runner
Lien avec la branche Pas de lien direct (sauf indication explicite) Généralement lié à la branche pour isolation

Ainsi, les artefacts sont les données de sortie de la compilation, et le cache sont des composants réutilisables pour accélérer la compilation elle-même.

job_example:
  stage: build
  script:
    - echo "Construction et test..."
    - mkdir build
    - echo "Résultat de la build" > build/result.txt
    - echo "Installation des dépendances"
  cache:
    paths:
      - dependency_dir/ # dossier avec dépendances, sera mis en cache
  artifacts:
    paths:
      - build/ # dossier build deviendra un artefact