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

Git Bitbucket管道-具有相同步骤的多个分支,git,yaml,bitbucket,bitbucket-pipelines,Git,Yaml,Bitbucket,Bitbucket Pipelines,是否可以在bitbucket管道中组合具有相同步骤的多个分支 例:我工作的团队使用两个名称中的一个作为他们的评审分支,要么是“rev”要么是“staging”。无论哪种方式,都使用相同的步骤发布到我们的审阅服务器。现在,分支机构被单独调用 pipelines: branches: rev: steps: - echo 'step' staging:

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

例:我工作的团队使用两个名称中的一个作为他们的评审分支,要么是“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
另一种可能性是,正如其他人所指出的,使用一些非标准的、特定于位桶的、带有嵌入逗号的标量键解释。我还没有找到关于这方面的明确文档,但是似乎是适用的,所以您可以使用
{rev,staging}
作为键

这其中的丑陋之处在于,
{
是YAML中的流样式序列指示器,因此需要引用标量:

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


根据Anthon在对其答案的评论中的要求,使用BlueM提供的更正步骤语法对上述内容进行了更新。这是他的完美解决方案,但具有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
定义:
服务:…#服务定义在那里
步骤:
-步骤:&测试步骤
名称:运行测试
脚本:
-npm安装
-npm运行测试
-步骤:&部署步骤
名称:部署到暂存
部署:登台
脚本:
-npm安装
-npm运行构建
-工厂部署
管道:
违约:
-步骤:*测试步骤
-步骤:*部署步骤
分支机构:
大师:
-步骤:*测试步骤
-步骤:

很酷,确实有效。(至少当使用正确的Bb管道语法时,这不是原始帖子的情况。)@BlueM你能添加正确的语法示例作为我答案的替代吗?作为devops中的一个完全的noob,这篇帖子让我很困惑。理论的终点在哪里?这是
“{a,b}”
工作解决方案?
[rev,staging]:
对于BitBucket的验证器无效。我认为此解决方案比其他解决方案更干净。我这样使用:
'{feature/*,fix/*}“
因为所有的
功能
修复
分支都经过相同的步骤。请确保在分支配置中不要在逗号后面加空格,否则它会假定分支名称前面有空格。(所以不要这样做:
'{rev,staging}
)非常感谢它现在正在工作。我像这样使用它。”{release/**,hotfix/**}“:
我知道。在使用验证器时,我遇到了各种语法,它们确实有效,但被报告为无效。显然,验证器没有使用与实际管道相同的代码库/语言/库进行解析。只是尝试了这种语法,bitbucket本身出现了验证错误。bitbucket管道确实支持YAML别名和anchors,但验证器没有。如果您想验证yaml,请通过在线yaml json转换器(yaml=>json=>yaml)将其运行到,并将生成的yaml呈现给验证器。仔细检查,我在2019年2月18日的bitbucket.org上没有这样做。
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