Je me demande s'il existe une possibilité de définir un travail qui génère des artefacts pour ne jamais expirer si le commit est avec une balise sinon il devrait expirer. Actuellement, il expire globalement après 3 jours. Mais je veux quelque chose comme si un commit est fait avec une balise
spécifique et qu'il exécute un Job A
qui génère des artefacts, il ne devrait jamais expirer. Mais le même Job A
devrait s'exécuter pour d'autres commits sans balises et les artefacts générés pour cela devraient expirer dans le délai globalement défini.
3 Réponses :
Vous pouvez définir l ' expiration de l'artefact par tâche.
Donc, pour le travail où il utilise la balise particulière, vous définiriez l'artefact pour qu'il expire dans une longue période de temps
job: tags: - your_tag artifacts: expire_in: 5 yr
Il est correct pour les travaux exécutés pour des balises spécifiques. Mais je pense que ma question n'est pas correctement écrite, je vais la modifier. J'ai un travail qui s'exécute pour chaque commit et les artefacts pour ce travail expirent dans trois jours mais pour le même travail s'il y a un commit avec tag
je veux que les artefacts soient conservés pour toujours.
Voir GitLab 13.3 (août 2020), ceci est officiellement pris en charge
(par opposition à une "solution de contournement", avec expire_in 5 ans
!)
Configurer un artefact de tâche pour qu'il n'expire jamais
En tant que développeur, vous avez la possibilité de spécifier la date d'expiration exacte d'un artefact de tâche, mais dans certains cas, vous devrez peut-être conserver un artefact pour toujours.
Désormais, vous pouvez définir un artefact pour qu'il n'expire jamais en définissant la valeur de
expire_in
surnever
dans votre configuration CI.Voir Documentation et Problème .
Le PO précise:
J'ai un travail qui s'exécute pour chaque commit et les artefacts de ce travail expirent dans trois jours mais pour le même travail s'il y a un commit avec une balise, je veux que les artefacts soient conservés pour toujours.
Remarque: GitLab 13.4 (septembre 2020) ajoute une fonctionnalité intéressante:
Verrouillez le dernier artefact de tâche pour empêcher la suppression
GitLab va désormais verrouiller automatiquement le dernier artefact d'une tâche et d'un pipeline réussis sur n'importe quelle branche, MR ou balise active pour empêcher sa suppression en fonction de l'expiration. Cela facilite la définition d'une politique d'expiration plus agressive pour nettoyer les anciens artefacts, réduit la consommation d'espace disque et garantit que vous avez toujours une copie du dernier artefact de votre pipeline.
Voir Documentation et Problème .
Vous pourriez avoir une tâche dédiée pour gérer la persistance des artefacts qui ne s'exécute que sur la balise. Quelque chose comme:
persist-tag-artifacts: # Use this job to specify artifacts that should never expire for tag pipelines. stage: post-deploy rules: - if: '$CI_COMMIT_TAG != null' script: - echo "Persiting artifacts for tag pipelines" artifacts: # Specify artifacts from previous jobs to be persisted indefinitely paths: - myArtifactsPathFromJob1 - myArtifactsPathFromJob2 - ... expire_in: never
Exécutez cette tâche après la dernière étape de "création d'artefact" de votre pipeline. Tous les artefacts des travaux des étapes précédentes sont automatiquement copiés dans ce travail. Si vous ne voulez pas que tous les artefacts soient copiés mais seulement ceux que vous souhaitez conserver, vous pouvez utiliser le mot-clé dependencies
.
Ce serait quand même plus agréable si Gitlab avait un moyen de définir conditionnellement un "expire_in: never" global