如何在多分支中触发 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
是一个与任何其他文件一样的文件,在分支方面没有任何“特殊”之处。
但是,我明白你为什么感到困惑——为什么有一个 单个 配置文件来指定每个分支的行为,而一个分支可以只在 每个 分支?我假设这背后的基本原理是通常配置会非常相似。例如,大多数存储库都有 develop
和 master
等分支,它们可能仅在部署位置上有所不同。在分支中有不同的文件会更难处理。
在您提问之前:是的,您可以配置 2 个以上的分支来执行相同的操作。至少有 2 种可能的语法,最简单的一种是:
pipelines:
branches:
'{develop,master,release/*}':
- step:
script:
- echo $BITBUCKET_BRANCH
已更新
如果没有文档参考,很难确定,但当时文档有误(可能现在已更正)或者您误读了 "only one copy" 关于 master 分支的声明。
如果满足以下两个条件,Bitbucket 将触发管道构建:
- 一个 bitbucket-pipelines.yml 文件需要存在于被推送到 bitbucket 的特定分支中,并且
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,它进一步说明了它的工作原理。
我在 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
是一个与任何其他文件一样的文件,在分支方面没有任何“特殊”之处。
但是,我明白你为什么感到困惑——为什么有一个 单个 配置文件来指定每个分支的行为,而一个分支可以只在 每个 分支?我假设这背后的基本原理是通常配置会非常相似。例如,大多数存储库都有 develop
和 master
等分支,它们可能仅在部署位置上有所不同。在分支中有不同的文件会更难处理。
在您提问之前:是的,您可以配置 2 个以上的分支来执行相同的操作。至少有 2 种可能的语法,最简单的一种是:
pipelines:
branches:
'{develop,master,release/*}':
- step:
script:
- echo $BITBUCKET_BRANCH
已更新
如果没有文档参考,很难确定,但当时文档有误(可能现在已更正)或者您误读了 "only one copy" 关于 master 分支的声明。
如果满足以下两个条件,Bitbucket 将触发管道构建:
- 一个 bitbucket-pipelines.yml 文件需要存在于被推送到 bitbucket 的特定分支中,并且
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,它进一步说明了它的工作原理。