1
votes

Comment définir des artefacts de tâche avec des balises pour ne jamais expirer Gitlab CI

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.


0 commentaires

3 Réponses :


0
votes

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


1 commentaires

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.



1
votes

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 sur never 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 .


0 commentaires

0
votes

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


0 commentaires