Bitbucket管道 - 具有相同步骤的多个分支

时间:2017-02-17 17:54:26

标签: git yaml bitbucket bitbucket-pipelines

是否可以组合在bitbucket管道中具有相同步骤的多个分支?

ex:我工作的团队使用两个名称之一作为他们的评论分支,“rev”或“staging”。无论哪种方式,都使用相同的步骤发布到我们的审查服务器。现在,分支被单独调出。

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

但可能是

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

5 个答案:

答案 0 :(得分:31)

大括号内的逗号分隔列表似乎有效:

C:\>py -2 test.py
2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)]
c:\windows\web\wallpaper\theme1\img1.jpg
c:\windows\web\wallpaper\theme1\img1.jpg

C:\>py -3 test.py
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
b'c:\\windows\\web\\wallpaper\\theme1\\img1.jpg'
c:\windows\web\wallpaper\theme1\img1.jpg

答案 1 :(得分:8)

而不是解释rev|staging,一种更自然的实现方式是使用流式样序列作为键:

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

这将减少引用和确保空格的需要,或者额外(尾随)逗号,不会产生语义差异。根据bitbucket用来处理它的库,上面的内容可能会正确解析,但不能加载(例如PyYAML无法处理上述内容,但ruamel.yaml)。 我无法验证这种优选方式是否真的适用于bitbucket

有两种方法可以工作,一种方法使用熟悉的锚点和别名的YAML功能,只提供一次重复(复杂)数据结构:

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

正如其他人所指出的,另一种可能性是使用一些非标准的,bitbucket特定的,用嵌入式逗号来解释标量键。我没有找到关于此的明确文档,但glob patterns似乎适用,因此您可以使用{rev,staging}作为密钥。

有什么丑陋的是{是YAML中的流式序列指示符,因此需要引用标量:

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

使用BlueM提供的更正步骤语法

更新上述内容

答案 2 :(得分:7)

这是有关如何重复使用 一些 步骤的完整示例:

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

了解有关YAML锚点的更多信息: https://confluence.atlassian.com/bitbucket/yaml-anchors-960154027.html

答案 3 :(得分:3)

根据Anthon对他的回答的评论,这是他的完美解决方案,但正如Bitbucket Pipelines所期望的那样正确的YAML结构:

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

答案 4 :(得分:1)

使用Bitbucket 5.8以便能够手动触发管道我必须使用这种格式:

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

所以基本上只是逗号分隔的分支列表需要相同的管道