繁体   English   中英

如何在 Azure 管道中组合 Git 分支和标记触发器

[英]How to combine Git branch and tag triggers in Azure Pipelines

语境

Azure 管道支持不同类型的 CI 触发器( 文档)。

示例 A:

trigger:
  branches:
    include:
    - master

如果在 master 分支中检测到新的提交,管道将运行。

示例 B:

trigger:
  branches:
    include:
      - refs/tags/v*

如果检测到以v开头的新标签,则管道将运行。

我希望我的管道在上述两个条件都为真时运行:分支标记。

示例 C(未按预期工作):

trigger:
  branches:
    include:
    - master
    - refs/tags/v*

结合这两个触发器似乎就像一个或条件,而不是一个和条件。

问题

只有当有新的v*标签时,如何才能在master分支上触发管道?

在我看来,这是不可能的。 以下文档

如果您将标签与包含文件路径的分支过滤器一起指定,则如果满足分支过滤器并且满足标签或路径过滤器,则触发器将触发。

不幸的是,添加条件在这里无济于事,因为我们没有足够的信息。 例如对于tag触发器,我们有这个

BUILD_SOURCEBRANCH=refs/tags/release-07
BUILD_SOURCEBRANCHNAME=release-07

对于branch触发这个:

BUILD_SOURCEBRANCH=refs/heads/master
BUILD_SOURCEBRANCHNAME=master

即使您尝试使用git branch手动检查分支名称,您也会得到:

* (HEAD detached at 154ce86)

对我来说,这是开发者社区功能请求的一个很好的候选者。

我找到了一种使用模板和参数的方法。

例子

首先,创建一个带有参数化任务和脚本的common.yaml

parameters:
  - name: myMessage
    type: string
    default: 'Hello from template!'
  - script: |
      echo ${{ parameters.myMessage }}

这个 yaml 可以包含任意数量的参数、共享任务和脚本。

然后,为 master 分支创建一个master.yaml

trigger:
  branches:
    include:
    - master
extends:
  template: common.yml
  parameters:
      myMessage: 'Hello from master!' # Overrides default parameter value

创建另一个tags.yaml为每个新版本标签运行:

trigger:
  branches:
    include:
    - refs/tags/v*
extends:
  template: common.yml
  parameters:
      myMessage: 'Hello from tags!' # Overrides default parameter value

最后,在 Azure DevOps web 接口中创建两个管道。 将其中一个管道连接到master.yaml ,另一个连接到tags.yaml

使用此设置,每个触发器都是独立的,具有最少的 yaml 重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM