触发标记时,Azure Devops Pipeline 触发器忽略路径

Azure Devops Pipeline trigger ignore paths when a tag is triggered

我有两个构建我的客户端和 API 的构建管道,但是当我创建一个新的 git 标签时,两个构建都会被触发,即使该标签可能只与基于我的客户代码。

前端构建-ci.yml

trigger:
  branches:
    include:
      - master
  tags:
    include:
      - refs/tags/*_prodrelease*
  paths:
    include:
      - Clients/*
    exclude:
      - Api/*

api-build-ci-yml

trigger:
  branches:
    include:
      - master
  tags:
    include:
      - refs/tags/*_prodrelease*
  paths:
    include:
      - Api/*
    exclude:
      - Clients/*

常规提交按预期工作(即客户端代码触发客户端构建),我尝试了多种排除路径的变体,但无济于事。

标签过滤应该忽略路径,还是应该像分支一样工作?

一种解决方法是使用更具描述性的标签(即 20200326_prodrelease_api),但如果 api 客户已准备好生产。

When I create a new git tag, both builds are triggered, even though the tag may only related to changes based on my client code.

Should tag filtering be ignoring paths, or should it work in the same way as branches?

抱歉,恐怕您遇到的是 CI 触发器的 预期行为 。是的,您的猜测是正确的 tag filtering is ignoring paths 当标签与包含文件路径的分支过滤器结合使用时。

请查看official document中的注意提示:

如果您将标签与包含文件路径的分支过滤器结合使用,则触发器将在满足分支过滤器并且满足标签或路径过滤器的情况下触发。

问题原因:

这就是在您的场景中触发两个构建的原因。由于您现在将标签与分支过滤器和文件路径过滤器结合使用,因此 branch filter ok + tag okbranch filter ok + path ok 都可以触发构建。

行为:

不创建标签时,branch filter ok + path ok 将像 client code triggers client buildapi code triggers api build 一样工作。并且在创建特定标签时,因为 branch filter ok + tag ok 总是满足,它会触发两个构建。

正如您上面提到的,使用更具描述性的标签作为解决方法在这种情况下是一个不错的选择。此外,如果您确实想要使三个过滤器同时工作等功能,请随时通过在我们的 User Voice Forum 中建议功能来分享您的反馈。在这里分享 link,对此感兴趣的成员会投票给你。