web-dev-qa-db-fra.com

Comment exécuter un travail gitlab-ci.yml uniquement sur une branche étiquetée?

Comment exécuter un travail .gitlab-ci.yml uniquement sur une branche maître étiquetée?

job:
  script:
  - echo "Do something"
  only:
  - master
  - tags

Le code ci-dessus s'exécutera si l'une des conditions existe: une branche principale ou une validation étiquetée.

Mon objectif est d’avoir cette exécution pour un déploiement en production, mais cela nécessiterait que ce soit sur la branche principale et qu’elle soit étiquetée (avec une version). Sinon, j'aurai un autre travail qui sera Push to staging s'il manque une balise.

38
Carson Cole

Ce comportement sera introduit dans la version 12 .

numéro ouvert a été récemment mis à jour:

Jason Lenny @jlenny a changé le titre de {-Update .gitlab-ci.yml pour prendre en charge la logique de conjonction pour les conditions de construction-} en logique de conjonction pour les conditions de construction MVC · il y a 2 jours

Jason Lenny @jlenny a changé le jalon à 12.0 · il y a 2 jours

(doigts croisés)

Une solution consiste à utiliser le mot clé except pour exclure toutes les branches, conjointement avec only à exécuter sur les balises. Ainsi, vous n'exécutez votre pipeline que sur les balises de la branche principale:

  only:
    - tags
  except:
    - branches

J'utilise la version 11.3.4

10
Sergio Tomasello

Je l'ai fait fonctionner et ceci est mon bout de code de travail, tous les autres ne travaillaient pas pour moi

only:
 - tags  # please mention the 's' compared to Sergio Tomasello's solution
except:
 - branches

J'utilise 11.4.3

6
hannes ach

Ce comportement n'est pas encore supporté par gitlab-ci, bien qu'il y ait un numéro ouvert pour l'ajouter.

Entre-temps, j'ai aussi entendu des rapports anecdotiques selon lesquels

only:
  - master
only:
  - tags

fera le travail (ainsi que des rapports anecdotiques qu'il ne le fera pas).

5
Matt Alioto

Merci à d’autres, comme Matt Alioto, qui ont publié des articles sur le numéro ouvert (intitulé Product Vision 2019, Alors espérons-le, ils l'assommeront cette année).

Spécifique à la question de Carlson Cole, cela fonctionnerait:

job_for_master_no_tags:
  stage: deploy
  script:
  - echo "Release to Staging"
  only:
  - master

job_for_master_tags_only:
  stage: deploy
  script:
  - echo "Release to Production"
  only:
  - tags
  except:
  - /^(?!master).+@/    # Ruby RegEx for anything not starting with 'master'
  • Pour voir comment fonctionne ce RegEx, consultez https://rubular.com/r/1en2eblDzRP5Ha
  • J'ai testé cela sur la version de GitLab 11.7. et cela fonctionne
    • Remarque: Si vous essayez d'utiliser - /^(?!master).+/ (sans le @), Cela ne fonctionne pas - appris à la dure ????
4
Eric D. Johnson