如何在multibranch中触发bitbucket管道

时间:2018-01-03 06:08:01

标签: java maven-3 git-branch bitbucket-pipelines

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

- master 
- API
- Admin
- Web

我在bitbucket-pipelines.yml下只有一个master branch,就像那样:

image: maven:3.5.0-jdk-7

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

           - mvn install

所以我希望每当API分支发生任何推动都会触发这个管道时,实际上它并没有发生,除非对主分支进行了推送,唯一的出路就是把同一个文件也放到在API分支下,虽然文档说它只有一个副本位于repo root master branch下,那么我怎样才能实现那个PLZ?

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

2 个答案:

答案 0 :(得分:1)

如果bitbucket-pipelines.yml中只有master,则推送到bitbucket-pipelines.yml时没有API,因此不会运行任何管道。就这么简单。您引用的文档中的“只有一个副本”语句对我来说没有多大意义,因为YAML文件只是在Git中,因此是分支依赖的,即bitbucket-pipelines.yml是一个类似的文件任何其他文件,当谈到分支时,没有任何“特殊”。

但是,我明白为什么你感到困惑 - 为什么有一个单个配置文件指定每个分支的行为,而一个人可能只在每个分支?我假设这背后的基本原理是通常配置非常相似。例如,大多数repos都会包含developmaster等分支,这些分支可能只在部署的位置有所不同。在分支机构中使用不同的文件会更难以使用。

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

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

答案 1 :(得分:1)

<强>已更新

如果没有文档参考,很难确定,但是当时文档出错(可能现在已经更正),或者您误读了关于主分支的“只有一个副本”声明。

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

  1. bitbucket-pipelines.yml文件需要存在于被推送到bitbucket的特定分支中,并且
  2. branches:节点下的嵌套块与该分支名称匹配,或者在bitbucket-pipelines.yml文件中定义了default:节点块。
  3. default节点块下定义的步骤将针对与branches:节点块下定义的任何“分支”不匹配的所有分支执行。因此,为了显示使用分支的示例,下面的yaml文件将执行API分支的default步骤(包括您创建并且未明确定义的任何后续分支),假设仍满足上述条件#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,进一步说明它是如何工作的。