如何仅在对主分支的拉取请求上运行管道

时间:2019-03-06 09:04:21

标签: git bitbucket bitbucket-pipelines

Bitbucket管道允许定义对拉取请求的检查,并具有全局过滤器,可以检查源分支。

pipelines:
  pull-requests:
    '**': #this runs as default for any branch not elsewhere defined
      - step:
          script
            - ...
    feature/*: #any branch with a feature prefix
      - step:
          script:
            - ...

如何根据目标分支进行过滤?只有合并到母版后,才需要执行一些测试。

1 个答案:

答案 0 :(得分:2)

不幸的是,拉取请求流水线机制是基于源分支而不是目标分支运行的。

对此进行了解释,原因是他们的跟踪者通过团队成员之一添加了pull-request功能:

  

pull请求下的分支模式定义了源分支。这个   这样您就可以根据修复程序运行其他管道。对于   例如,对于功能分支,您可能有一组不同的测试   修补程序分支。请注意,这只是在谈论那些   在开发过程中违反公关。

来源: Geoff Crain's comment

this exact feature实际上还有另一个问题。

但是团队的答案是:

  

我绝对可以理解为什么这会很有用,尤其是在合并时   到主/主分支。

     

鉴于我们当前的优先事项,这不太可能   我们会在短期内提供支持。在此期间,我将打开   这张票是为了衡量其他用户看到相同票券的兴趣   东西。

Aneita Yang's comment

也就是说,您可能以某种方式具有所需的行为:

pipelines:
  pull-requests:
    '**': #this runs as default for any branch not elsewhere defined
      - step:
          script
            - if [ "${BITBUCKET_PR_DESTINATION_BRANCH}" != "master" ]; then printf 'not a target branch we want to check'; exit; fi
            - printf 'running useful tests'

或者,如果您已经对所有pull请求进行了一些测试,如我所理解的那样:

pipelines:
  pull-requests:
    '**': #this runs as default for any branch not elsewhere defined
      - step:
          script
            - printf 'these are the all PR tests'
            - if [ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "master" ]; then printf 'those are the extra checks on master'; fi

或者再说一次,它可以独立地外部化为脚本:

bitbucket-pipelines.yaml

pipelines:
  pull-requests:
    '**': #this runs as default for any branch not elsewhere defined
      - step:
          script
            - ./bin/tests "${BITBUCKET_PR_DESTINATION_BRANCH}"

bin /测试

#!/usr/bin/env bash

printf 'these are the all PR tests'

if [ "${1}" = "master" ]
then 
    printf 'those are the extra checks on master'
fi

另请参见:管道文档页面中的变量:https://confluence.atlassian.com/bitbucket/variables-in-pipelines-794502608.html