如何在多分支中触发 bitbucket 管道

How to trigger bitbucket pipeline in multibranch

我在 bit-bucket 帐户下有一个存储库,这个存储库有这 4 个分支:

- master 
- API
- Admin
- Web

我在 master branch 下只有一个 bitbucket-pipelines.yml 之类的:

image: maven:3.5.0-jdk-7

pipelines:
  branches:
    API:
     - step:
        caches:
          - maven
        script: 

           - mvn install

所以我希望每当 API 分支发生任何推送时都会触发此管道,事实上它并没有发生,除非推送完成到主分支,唯一的出路是把同样的文件也在 API 分支下,尽管文档说它只有一个副本位于 repo root master branch 下,那么我该如何实现呢?

如果我需要在所有分支中放置相同的管道文件,我认为这完全是可笑的,所以任何人都可以澄清一下吗? 提前致谢!

如果你在master中只有一个bitbucket-pipelines.yml,那么当你push到API时就没有bitbucket-pipelines.yml,因此没有管道会运行 ].就这么简单。您引用的文档中的“仅一份”声明对我来说意义不大,因为 YAML 文件位于 Git 中,因此是分支相关的,即 bitbucket-pipelines.yml是一个与任何其他文件一样的文件,在分支方面没有任何“特殊”之处。

但是,我明白你为什么感到困惑——为什么有一个 单个 配置文件来指定每个分支的行为,而一个分支可以只在 每个 分支?我假设这背后的基本原理是通常配置会非常相似。例如,大多数存储库都有 developmaster 等分支,它们可能仅在部署位置上有所不同。在分支中有不同的文件会更难处理。

在您提问之前:是的,您可以配置 2 个以上的分支来执行相同的操作。至少有 2 种可能的语法,最简单的一种是:

pipelines:
  branches:
    '{develop,master,release/*}':
      - step:
          script:
            - echo $BITBUCKET_BRANCH

已更新

如果没有文档参考,很难确定,但当时文档有误(可能现在已更正)或者您误读了 "only one copy" 关于 master 分支的声明。

如果满足以下两个条件,Bitbucket 将触发管道构建:

  1. 一个 bitbucket-pipelines.yml 文件需要存在于被推送到 bitbucket 的特定分支中,并且
  2. branches: 节点下的嵌套块与该分支名称匹配,或者 default: 节点块在 bitbucket-pipelines.yml 文件中定义。

default 节点块下定义的步骤将对所有不匹配 branches: 节点块下定义的任何 "branches" 的分支执行。因此,为了显示使用您的分支的示例,假设上述条件#该分支仍满足 1。

pipelines:
  default:
    - step:
      script:
        - echo $BITBUCKET_BRANCH
  branches:
    master:
      - step:
        script:
          - echo $BITBUCKET_BRANCH
  branches:
    '{Admin,Web}':
      - step:
        script:
          - echo $BITBUCKET_BRANCH

您会在 official documentation 中找到一个漂亮的小动画 gif,它进一步说明了它的工作原理。