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.
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
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
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).
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'
- /^(?!master).+/
(sans le @
), Cela ne fonctionne pas - appris à la dure ????