doc-locale/fr-fr/ci/jobs/job_artifacts.md
{{< details >}}
{{< /details >}}
Les jobs peuvent générer une archive de fichiers et de répertoires. Cette sortie est appelée artefact de job. Les artefacts peuvent inclure des fichiers de sortie de build ou des fichiers de rapport. Par défaut, les jobs ultérieurs récupèrent une copie de tous les artefacts des jobs des étapes précédentes.
Par exemple, un job précoce peut builder un projet et enregistrer la sortie en tant qu'artefact. Ensuite, un job ultérieur récupère l'artefact et exécute des tests sur la sortie de build enregistrée.
Pour obtenir la liste complète des configurations prises en charge pour le mot-clé artifacts, consultez la référence de syntaxe YAML GitLab CI/CD.
Sujets connexes :
Pour créer des artefacts de job, utilisez le mot-clé artifacts dans votre fichier .gitlab-ci.yml :
pdf:
script: xelatex mycv.tex
artifacts:
paths:
- mycv.pdf
Dans cet exemple, un job nommé pdf appelle la commande xelatex pour créer un fichier PDF à partir du fichier source LaTeX mycv.tex.
Le mot-clé paths détermine les fichiers à ajouter aux artefacts de job. Tous les chemins d'accès aux fichiers et répertoires sont relatifs au dépôt dans lequel le job a été créé.
Vous pouvez utiliser des caractères génériques pour les chemins et les répertoires. Par exemple, pour créer un artefact avec tous les fichiers dans les répertoires qui se terminent par xyz :
job:
script: echo "build xyz project"
artifacts:
paths:
- path/*xyz/*
Le mot-clé expire_in détermine la durée pendant laquelle GitLab conserve les artefacts définis dans artifacts:paths. Par exemple :
pdf:
script: xelatex mycv.tex
artifacts:
paths:
- mycv.pdf
expire_in: 1 week
Si expire_in n'est pas défini, le paramètre d'instance Expiration par défaut des artéfacts est utilisé.
Pour empêcher l'expiration des artefacts, vous pouvez sélectionner Garder depuis la page de détails du job. Cette option n'est pas disponible lorsqu'un artefact n'a pas de date d'expiration définie.
Par défaut, les artefacts sont toujours conservés pour le pipeline réussi le plus récent sur chaque ref.
Vous pouvez personnaliser explicitement les noms des artefacts à l'aide de la configuration artifacts:name :
job:
artifacts:
name: "job1-artifacts-file"
paths:
- binaries/
Utilisez artifacts:exclude pour empêcher l'ajout de fichiers à une archive d'artefacts.
Par exemple, pour stocker tous les fichiers dans binaries/, mais pas les fichiers *.o situés dans les sous-répertoires de binaries/ :
artifacts:
paths:
- binaries/
exclude:
- binaries/**/*.o
Contrairement à artifacts:paths, les chemins exclude ne sont pas récursifs. Pour exclure tout le contenu d'un répertoire, faites-y correspondre les éléments explicitement plutôt que de faire correspondre le répertoire lui-même.
Par exemple, pour stocker tous les fichiers dans binaries/ mais rien situé dans le sous-répertoire temp/ :
artifacts:
paths:
- binaries/
exclude:
- binaries/temp/**/*
Utilisez artifacts:untracked pour ajouter tous les fichiers Git non suivis en tant qu'artefacts, en plus des chemins définis dans artifacts:paths. Les fichiers non suivis sont ceux qui n'ont pas été ajoutés au dépôt mais qui existent dans l'extraction du dépôt.
Par exemple, pour enregistrer tous les fichiers Git non suivis et les fichiers dans binaries :
artifacts:
untracked: true
paths:
- binaries/
Par exemple, pour enregistrer tous les fichiers non suivis mais exclure les fichiers *.txt :
artifacts:
untracked: true
exclude:
- "*.txt"
L'expansion de variables est prise en charge pour artifacts:name, artifacts:paths et artifacts:exclude.
Au lieu d'utiliser le shell, GitLab Runner utilise son mécanisme interne d'expansion de variables. Seules les variables CI/CD sont prises en charge dans ce contexte.
Par exemple, pour créer une archive en utilisant le nom de la branche ou du tag actuel, en incluant uniquement les fichiers d'un répertoire portant le nom du projet actuel :
job:
artifacts:
name: "$CI_COMMIT_REF_NAME"
paths:
- binaries/${CI_PROJECT_NAME}/
Lorsque le nom de votre branche contient des barres obliques (par exemple, feature/my-feature), utilisez $CI_COMMIT_REF_SLUG à la place de $CI_COMMIT_REF_NAME pour assurer un nommage correct des artefacts.
Les variables sont développées avant les globs.
Par défaut, les jobs récupèrent tous les artefacts des jobs définis dans les étapes précédentes. Ces artefacts sont téléchargés dans le répertoire de travail du job.
Vous pouvez contrôler les artefacts à télécharger en utilisant les mots-clés dependencies ou needs:artifacts.
Lorsque vous utilisez ces mots-clés, le comportement par défaut change et les artefacts sont récupérés uniquement depuis les jobs que vous spécifiez.
Pour empêcher un job de télécharger des artefacts, définissez dependencies sur un tableau vide ([]) :
job:
stage: test
script: make build
dependencies: []
Vous pouvez afficher tous les artefacts stockés dans un projet depuis la page Version > Artéfacts. Cette liste affiche tous les jobs et leurs artefacts associés. Développez une entrée pour accéder à tous les artefacts associés à un job, notamment :
artifacts:.Vous pouvez télécharger ou supprimer des artefacts individuels depuis cette liste.
Vous pouvez télécharger des artefacts de job via l'interface GitLab ou l'API.
Depuis l'interface GitLab, vous pouvez télécharger des artefacts de job depuis :
Les artefacts de rapport ne peuvent être téléchargés qu'à partir de la liste Pipelines ou de la page Artéfacts.
Vous pouvez télécharger l'archive des artefacts pour un job spécifique via une URL accessible publiquement.
Par exemple, pour télécharger les derniers artefacts d'un job nommé build dans la branche main d'un projet sur GitLab.com :
https://gitlab.com/api/v4/projects/<project-id>/jobs/artifacts/main/download?job=build
Pour télécharger un fichier spécifique depuis les artefacts :
https://gitlab.com/api/v4/projects/<project-id>/jobs/artifacts/main/raw/review/index.html?job=build
Les fichiers renvoyés par cet endpoint ont toujours le type de contenu plain/text.
Dans les deux exemples, remplacez <project-id> par un ID de projet valide. Vous pouvez trouver l'ID du projet sur la page de présentation du projet.
Les artefacts des pipelines parent et enfant sont recherchés dans un ordre hiérarchique du parent vers l'enfant. Par exemple, si les pipelines parent et enfant ont tous deux un job avec le même nom, les artefacts de job du pipeline parent sont renvoyés.
{{< details >}}
{{< /details >}}
Vous pouvez utiliser un jeton de job CI/CD pour vous authentifier auprès de l'endpoint de l'API des artefacts de job et récupérer des artefacts depuis un pipeline différent. Vous devez spécifier le job à partir duquel récupérer les artefacts, par exemple :
build_submodule:
stage: test
script:
- apt update && apt install -y unzip
- |
curl --location --output artifacts.zip \
--url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN"
- unzip artifacts.zip
Pour récupérer des artefacts d'un job dans le même pipeline, utilisez le mot-clé needs:artifacts.
Pour restreindre qui peut télécharger les artefacts de job, utilisez le mot-clé artifacts:access dans votre fichier .gitlab-ci.yml. Par exemple :
job:
artifacts:
access: maintainer
paths:
- build/
Vous pouvez parcourir le contenu des artefacts depuis l'interface sans télécharger l'artefact localement, depuis :
Si GitLab Pages est activé globalement, même s'il est désactivé dans les paramètres du projet, vous pouvez prévisualiser certaines extensions de fichiers d'artefacts directement dans votre navigateur. Si le projet est interne ou privé, vous devez activer le contrôle d'accès GitLab Pages pour activer la prévisualisation.
Les extensions suivantes sont prises en charge :
| Extension de fichier | GitLab.com | Package Linux avec NGINX intégré |
|---|---|---|
.html | {{< yes >}} | {{< yes >}} |
.json | {{< yes >}} | {{< yes >}} |
.xml | {{< yes >}} | {{< yes >}} |
.txt | {{< no >}} | {{< yes >}} |
.log | {{< no >}} | {{< yes >}} |
Vous pouvez parcourir les artefacts de job du dernier pipeline réussi pour un job spécifique via une URL accessible publiquement.
Par exemple, pour parcourir les derniers artefacts d'un job nommé build dans la branche main d'un projet sur GitLab.com :
https://gitlab.com/<full-project-path>/-/jobs/artifacts/main/browse?job=build
Remplacez <full-project-path> par un chemin de projet valide ; vous pouvez le trouver dans l'URL de votre projet.
Définissez des limites de taille pour les artefacts de job afin de contrôler l'utilisation du stockage. Chaque fichier d'artefact dans un job a une taille maximale par défaut de 100 Mo.
[!note] Ce paramètre s'applique à la taille du fichier d'archive final, pas aux fichiers individuels dans un job.
Vous pouvez configurer les limites de taille des artefacts pour :
Pour modifier la taille maximale des artefacts pour un groupe ou un projet :
[!warning] La suppression du job log et des artefacts est une action destructrice qui ne peut pas être annulée. Procédez avec précaution. La suppression de certains fichiers, notamment les artefacts de rapport, les job logs et les fichiers de métadonnées, affecte les fonctionnalités GitLab qui utilisent ces fichiers comme sources de données.
Vous pouvez supprimer les artefacts et le job log d'un job.
Prérequis :
Pour supprimer un job :
Vous pouvez également supprimer des artefacts individuels depuis la page Artéfacts.
Vous pouvez supprimer plusieurs artefacts en même temps :
Utilisez le mot-clé artifacts:expose_as pour fournir un accès direct aux artefacts depuis l'interface des merge requests.
Par exemple, pour un artefact avec un seul fichier :
test:
script: ["echo 'test' > file.txt"]
artifacts:
expose_as: 'artifact 1'
paths: ['file.txt']
Avec cette configuration, la section Voir l'artéfact exposé affiche un lien vers file.txt intitulé artifact 1.
Par défaut, les artefacts sont toujours conservés pour le pipeline réussi le plus récent sur chaque ref. Toute configuration expire_in ne s'applique pas aux artefacts les plus récents.
Lorsqu'un nouveau pipeline sur le même ref se termine avec succès, les artefacts du pipeline précédent sont supprimés selon la configuration expire_in. Les artefacts du nouveau pipeline sont conservés automatiquement.
Les artefacts d'un pipeline ne sont supprimés selon la configuration expire_in que si un nouveau pipeline s'exécute pour le même ref et :
Conserver les derniers artefacts peut utiliser une grande quantité d'espace de stockage dans les projets comportant de nombreux jobs ou de grands artefacts. Si les derniers artefacts ne sont pas nécessaires dans un projet, vous pouvez désactiver ce comportement pour économiser de l'espace :
Après avoir désactivé ce paramètre, tous les nouveaux artefacts expirent selon la configuration expire_in. Les artefacts des anciens pipelines continuent d'être conservés jusqu'à ce qu'un nouveau pipeline s'exécute pour le même ref. Les artefacts du pipeline antérieur pour ce ref sont alors également autorisés à expirer.
Vous pouvez désactiver ce comportement pour tous les projets sur GitLab Self-Managed avec le paramètre d'instance Keep artifacts from latest successful pipelines.
Vous pouvez désactiver ce comportement pour tous les projets sur GitLab Self-Managed dans les paramètres CI/CD de l'instance.