74 votes

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

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

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

Le code ci-dessus s'exécutera si l'une ou l'autre condition existe: une branche Master ou une validation balisée.

Mon objectif est de le faire exécuter pour un déploiement de production, mais il faudrait qu'il soit sur la branche Master et qu'il soit balisé (avec une version). Sinon, je vais avoir un autre travail qui poussera à la mise en scène s'il manque une balise.

27voto

Ce comportement sera introduit dans la version 12.

Question ouverte a été récemment mise à jour:

Jason Lenny @jlenny titre modifié à partir de {-mise à Jour .gitlab-ci.yml pour soutien conjonction logique pour générer des conditions-} à la Conjonction de la logique pour créer les conditions MVC · il ya 2 jours

Jason Lenny @jlenny changé étape à 12,0 · il ya 2 jours

(croisons les doigts)

Une solution est d'utiliser l' except mot clé à exclure toutes les branches, en conjonction avec d' only pour s'exécuter sur des étiquettes, de cette façon vous exécutez votre pipeline seulement sur la balise dans la branche principale:

  only:
    - tags
  except:
    - branches

J'utilise la version 11.3.4

18voto

Eric D. Johnson Points 2374

Grâce à d'autres comme Matt Alioto qui a posté sur le sujet ouvert (ce qui est étiqueté Product Vision 2019 donc j'espère qu'ils coup cette année).

Spécifiques à Carlson Cole'à la question, ce serait le travail:

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 cette RegEx fonctionne découvrez https://rubular.com/r/1en2eblDzRP5Ha
  • J'ai testé cela sur GitLab version 11.7.0 et il fonctionne
    • Remarque: Si vous essayez d'utiliser - /^(?!master).+/ (sans l' @) qu'il n'a pas de travail a appris la manière dure

9voto

hannes ach Points 2031

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

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

J'utilise 11.4.3

6voto

Matt Alioto Points 166

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

Dans l'intervalle, j'ai également entendu des rapports anecdotiques

 only:
  - master
only:
  - tags
 

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X