Bitbucket Pipelines - multiple branches with same steps

血红的双手。 提交于 2019-12-20 17:26:13

问题


Is it possible to combine multiple branches that have the same steps within bitbucket pipelines?

ex: The teams I work on use one of two names for their review branches, either "rev" or "staging". Either way the same steps are used to publish to our review server. Right now the branches are called out separately.

pipelines:
     branches:
          rev:
               steps:
                    - echo 'step'
          staging:
               steps:
                    - echo 'step'

but could it be something like

pipelines:
     branches:
          rev|staging:
               steps:
                    - echo 'step'

回答1:


A comma-separated list inside braces appears to work:

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



回答2:


This is a full example on how you can reuse some steps:

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

Read more about YAML anchors: https://confluence.atlassian.com/bitbucket/yaml-anchors-960154027.html




回答3:


Instead of interpreting rev|staging, a far more natural way of implementing that would be using a flow style sequence as a key:

pipelines:
  branches:
    [rev, staging]:
    - step:
      script:
      - echo 'step'

That would alleviates the need for quoting and for making sure spaces, or an extra (trailing) comma, make no semantic difference. Depending on the library that bitbucket uses to process this, the above might parse correctly, but not load (e.g. PyYAML cannot handle the above, but ruamel.yaml). I have not been able to verify if this preferable way actually works in bitbucket.

There are two ways that do work, one using the familiar YAML functionality of anchors and aliases to provide repeated (complex) data structures only once:

pipelines:
  branches:
    rev: &sharedsteps
    - step:
      script:
      - echo 'step'
    staging: *sharedsteps

The other possibility is, as others have indicated, to use some a non-standard, bitbucket specific, interpretation of scalar keys with embedded comma's. I have not found clear documentation on this, but the glob patterns seem applicable, so you can use {rev,staging} as a key.

What is ugly about this is that { is the flow-style sequence indicator in YAML, so that scalar needs to be quoted:

pipelines:
  branches:
    "{rev,staging}":
    - step:
      script:
      - echo 'step'

The above was updated using the corrected step syntax that BlueM provided




回答4:


As requested by Anthon in a comment to his answer, this is his perfect solution, but with the correct YAML structure as expected by Bitbucket Pipelines:

pipelines:
  branches:
    rev: &sharedsteps
      - step:
          script:
            - echo 'step'
    staging: *sharedsteps



回答5:


With Bitbucket 5.8 in order to be able to manually trigger the pipeline I had to use this format:

pipelines:
  branches:
    rev,staging:
      - step:
        script:
          - echo 'step'

So basically just comma separated branch list which need the same pipeline



来源:https://stackoverflow.com/questions/42304478/bitbucket-pipelines-multiple-branches-with-same-steps

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!