web-dev-qa-db-fra.com

Bitbucket Pipelines - plusieurs branches avec les mêmes étapes

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'
21
Gery Teague

Une liste séparée par des virgules à l'intérieur des accolades semble fonctionner:

pipelines:
  branches:
    '{rev,staging}':
      - step:
        script:
          - echo 'step'
35
RH Becker

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

11
Max Malysh

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

9
Anthon

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
3
BlueM

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

0
Attila Csányi