Est-il possible de combiner plusieurs branches qui ont les mêmes étapes dans les pipelines bitbucket?
ex: Les équipes sur lesquelles je travaille utilisent l'un des deux noms pour leurs branches de révision, soit "rev" ou "staging". Dans les deux cas, les mêmes étapes sont utilisées pour publier sur notre serveur de révision. À l'heure actuelle, les branches sont appelées séparément.
pipelines:
branches:
rev:
steps:
- echo 'step'
staging:
steps:
- echo 'step'
mais pourrait-il être quelque chose comme
pipelines:
branches:
rev|staging:
steps:
- echo 'step'
Une liste séparée par des virgules à l'intérieur des accolades semble fonctionner:
pipelines:
branches:
'{rev,staging}':
- step:
script:
- echo 'step'
Ceci est un exemple complet sur la façon dont vous pouvez réutiliser certaines étapes:
image: yourimage:latest
definitions:
services: ... # Service definitions go there
steps:
- step: &Test-step
name: Run tests
script:
- npm install
- npm run test
- step: &Deploy-step
name: Deploy to staging
deployment: staging
script:
- npm install
- npm run build
- fab deploy
pipelines:
default:
- step: *Test-step
- step: *Deploy-step
branches:
master:
- step: *Test-step
- step:
<<: *Deploy-step
deployment: production
trigger: manual
En savoir plus sur les ancres YAML: https://confluence.atlassian.com/bitbucket/yaml-anchors-960154027.html
Au lieu d'interpréter rev|staging
, une manière beaucoup plus naturelle d'implémenter qui utiliserait une séquence de style de flux comme clé:
pipelines:
branches:
[rev, staging]:
- step:
script:
- echo 'step'
Cela atténuerait le besoin de citer et de s'assurer que les espaces, ou une virgule supplémentaire (de fin), ne font aucune différence sémantique. Selon la bibliothèque utilisée par bitbucket pour traiter cela, ce qui précède peut être analysé correctement, mais ne se charge pas (par exemple, PyYAML ne peut pas gérer ce qui précède, mais ruamel.yaml
). Je n'ai pas pu vérifier si cette méthode préférable fonctionne réellement dans bitbucket .
Il existe deux méthodes qui fonctionnent, l'une utilisant la fonctionnalité YAML familière des ancres et des alias pour fournir des structures de données répétées (complexes) une seule fois:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
L'autre possibilité est, comme d'autres l'ont indiqué, d'utiliser une interprétation non standard, spécifique au bitbucket, des clés scalaires avec des virgules intégrées. Je n'ai pas trouvé de documentation claire à ce sujet, mais les modèles globaux semblent applicables, vous pouvez donc utiliser {rev,staging}
comme clé.
Ce qui est moche c'est que {
est l'indicateur de séquence de style de flux dans YAML, de sorte que scalaire doit être cité:
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
Ce qui précède a été mis à jour en utilisant la syntaxe d'étape corrigée fournie par BlueM
Comme demandé par Anthon dans un commentaire à sa réponse, c'est sa solution parfaite, mais avec la structure YAML correcte comme prévu par Bitbucket Pipelines:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
Avec Bitbucket 5.8, pour pouvoir déclencher manuellement le pipeline, j'ai dû utiliser ce format:
pipelines:
branches:
rev,staging:
- step:
script:
- echo 'step'
Donc, fondamentalement, juste une liste de branches séparées par des virgules qui ont besoin du même pipeline