doc-locale/fr-fr/administration/cicd/job_artifacts.md
{{< details >}}
{{< /details >}}
Il s'agit de la documentation d'administration. Pour apprendre à utiliser les artefacts de job dans votre pipeline CI/CD GitLab, consultez la documentation de configuration des artefacts de job.
Un artefact est une liste de fichiers et de répertoires attachés à un job après sa fin. Cette fonctionnalité est activée par défaut dans toutes les installations GitLab.
Pour désactiver les artefacts sur l'ensemble du site :
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['artifacts_enabled'] = false
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Helm chart (Kubernetes)" >}}
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
artifacts:
enabled: false
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['artifacts_enabled'] = false
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
artifacts:
enabled: false
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
GitLab Runner peut charger une archive contenant les artefacts de job vers GitLab. Par défaut, cette opération est effectuée lorsque le job réussit, mais elle peut également être effectuée en cas d'échec, ou toujours, avec le paramètre artifacts:when.
La plupart des artefacts sont compressés par GitLab Runner avant d'être envoyés au coordinateur. L'exception à cette règle concerne les artefacts de rapports, qui sont compressés après le chargement.
Si vous utilisez le package Linux ou disposez d'une installation compilée manuellement, vous pouvez modifier l'emplacement de stockage local des artefacts.
[!note] Pour les installations Docker, vous pouvez modifier le chemin de montage de vos données. Pour le chart Helm, utilisez le stockage d'objets.
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
Les artefacts sont stockés par défaut dans /var/opt/gitlab/gitlab-rails/shared/artifacts.
Pour modifier le chemin de stockage, par exemple vers /mnt/storage/artifacts, modifiez /etc/gitlab/gitlab.rb et ajoutez la ligne suivante :
gitlab_rails['artifacts_path'] = "/mnt/storage/artifacts"
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
Les artefacts sont stockés par défaut dans /home/git/gitlab/shared/artifacts.
Pour modifier le chemin de stockage, par exemple vers /mnt/storage/artifacts, modifiez /home/git/gitlab/config/gitlab.yml et ajoutez ou modifiez les lignes suivantes :
production: &base
artifacts:
enabled: true
path: /mnt/storage/artifacts
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Si vous ne souhaitez pas utiliser le disque local où GitLab est installé pour stocker les artefacts, vous pouvez utiliser un stockage d'objets tel qu'AWS S3 à la place.
Si vous configurez GitLab pour stocker les artefacts sur un stockage d'objets, vous souhaiterez peut-être également éliminer l'utilisation du disque local pour les job logs. Dans les deux cas, les job logs sont archivés et déplacés vers le stockage d'objets à la fin du job.
[!warning] Dans une configuration multi-serveurs, vous devez utiliser l'une des options pour éliminer l'utilisation du disque local pour les job logs, sinon les job logs pourraient être perdus.
Vous devriez utiliser les paramètres de stockage d'objets consolidés.
Vous pouvez migrer les artefacts de job du stockage local vers le stockage d'objets. Le traitement est effectué par un worker en arrière-plan et ne nécessite no downtime.
Migrez les artefacts :
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
sudo gitlab-rake gitlab:artifacts:migrate
{{< /tab >}}
{{< tab title="Docker" >}}
sudo docker exec -t <container name> gitlab-rake gitlab:artifacts:migrate
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
sudo -u git -H bundle exec rake gitlab:artifacts:migrate RAILS_ENV=production
{{< /tab >}}
{{< /tabs >}}
Facultatif. Suivez la progression et vérifiez que tous les artefacts de job ont été migrés avec succès à l'aide de la console PostgreSQL.
Ouvrez une console PostgreSQL :
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
sudo gitlab-psql
{{< /tab >}}
{{< tab title="Docker" >}}
sudo docker exec -it <container_name> /bin/bash
gitlab-psql
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
sudo -u git -H psql -d gitlabhq_production
{{< /tab >}}
{{< /tabs >}}
Vérifiez que tous les artefacts ont été migrés vers le stockage d'objets à l'aide de la requête SQL suivante. Le nombre de objectstg doit être identique à total :
gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM p_ci_job_artifacts;
total | filesystem | objectstg
------+------------+-----------
19 | 0 | 19
Vérifiez qu'il n'y a aucun fichier sur le disque dans le répertoire artifacts :
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
sudo find /var/opt/gitlab/gitlab-rails/shared/artifacts -type f | grep -v tmp | wc -l
{{< /tab >}}
{{< tab title="Docker" >}}
En supposant que vous avez monté /var/opt/gitlab sur /srv/gitlab :
sudo find /srv/gitlab/gitlab-rails/shared/artifacts -type f | grep -v tmp | wc -l
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
sudo find /home/git/gitlab/shared/artifacts -type f | grep -v tmp | wc -l
{{< /tab >}}
{{< /tabs >}}
Si Geo est activé, revérifiez tous les artefacts de job.
Dans certains cas, vous devez exécuter la tâche Rake de nettoyage des fichiers d'artefacts orphelins pour nettoyer les artefacts orphelins.
Pour migrer les artefacts vers le stockage local :
gitlab-rake gitlab:artifacts:migrate_to_local.gitlab.rb.Avant GitLab 18.6, une migration du stockage distant vers le stockage local pouvait entraîner la copie des artefacts avec des noms de fichiers incorrects.
Si artifacts:expire_in est utilisé pour définir une expiration pour les artefacts, ceux-ci sont marqués pour suppression juste après la date passée. Sinon, ils expirent selon le paramètre d'expiration des artefacts par défaut.
Les artefacts sont supprimés par le cron job expire_build_artifacts_worker que Sidekiq exécute toutes les 7 minutes (*/7 * * * * en syntaxe Cron).
Pour modifier la planification par défaut de suppression des artefacts expirés :
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb et ajoutez la ligne suivante (ou décommentez-la si elle existe déjà et est commentée), en remplaçant votre planification en syntaxe cron :
gitlab_rails['expire_build_artifacts_worker_cron'] = "*/7 * * * *"
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Helm chart (Kubernetes)" >}}
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
cron_jobs:
expire_build_artifacts_worker:
cron: "*/7 * * * *"
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['expire_build_artifacts_worker_cron'] = "*/7 * * * *"
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
cron_jobs:
expire_build_artifacts_worker:
cron: "*/7 * * * *"
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Si les artefacts sont activés, vous pouvez modifier la taille de fichier maximale des artefacts via les paramètres de la zone Admin.
Vous pouvez consulter le stockage total utilisé pour les artefacts de job pour les groupes et les projets dans :
Lorsque GitLab reçoit une archive d'artefacts, un fichier de métadonnées d'archive est également généré par GitLab Workhorse. Ce fichier de métadonnées décrit toutes les entrées situées dans l'archive d'artefacts elle-même. Le fichier de métadonnées est au format binaire, avec une compression Gzip supplémentaire.
GitLab n'extrait pas l'archive d'artefacts pour économiser de l'espace, de la mémoire et des E/S disque. Il inspecte plutôt le fichier de métadonnées qui contient toutes les informations pertinentes. Cela est particulièrement important lorsqu'il y a de nombreux artefacts ou qu'une archive est un fichier très volumineux.
Lors de la sélection d'un fichier spécifique, GitLab Workhorse l'extrait de l'archive et le téléchargement commence. Cette implémentation permet d'économiser de l'espace, de la mémoire et des E/S disque.