2

我有两个构建我的客户端和 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 和客户端都准备好进行生产,我会尽量避免需要两个标签。

4

1 回答 1

3

当我创建一个新的 git 标签时,两个构建都会被触发,即使标签可能只与基于我的客户端代码的更改有关。

标签过滤应该忽略路径,还是应该以与分支相同的方式工作?

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

请查看官方文档中的注意提示:

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

问题原因:

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

行为:

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

正如您上面提到的,在这种情况下,使用更具描述性的标签作为解决方法并不是一个糟糕的选择。此外,如果您确实希望同时使用三个过滤器等功能,请随时通过在我们的用户语音论坛中提出功能来分享您的反馈。在此处分享链接,对此感兴趣的成员将为您投票。

于 2020-03-27T05:35:42.903 回答