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

Bitbucket Pipelines - multiple branches with same steps

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

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

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

但会不会像

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

而不是解释 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

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

丑陋的是,{是YAML中的flow-style序列指示符,因此需要引用标量:

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

以上是使用 BlueM 提供的更正步骤语法更新的

正如 Anthon 在对他的回答的评论中所要求的,这是他的完美解决方案,但具有 Bitbucket Pipelines 所期望的正确 YAML 结构:

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

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

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

对于 Bitbucket 5.8,为了能够手动触发管道,我必须使用这种格式:

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

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

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

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