Azure Devops - 如何强制触发CI在新分支上运行,或者处理发布分支?

3
以前,当您将新分支推送到Origin时,Azure DevOps会运行新的CI构建。我的公司依赖此功能,因为我们会从develop创建一个release/*分支来发布版本,这将触发构建并随后在测试环境中发布。如果一切顺利通过UAT/QA测试,我们将部署相同的构建到生产环境中。
我们的Build Pipelines都是经典UI,并具有两个分支过滤器:developrelease/*。涉及的一个产品有两个构建管道-一个用于Webjob,一个用于API,因此每个管道都有一个路径过滤器(包括或不包括Webjob文件夹)。创建release/*分支不会触发任何CI管道。
我们的发布管道如下所示,其中DEV基于从develop生成的工件触发,TEST->PROD基于从release/*构建的工件触发- Azure Release pipeline 这使我们能够拥有一个发布环境,在其中迭代地进行更改以准备就绪,同时我们还在为下一个版本做出更改。这是一种常见的Gitflow模型。

问题

现在Azure不再在分支创建时触发构建,我被迫手动运行构建以触发上述图像中的构建和随后的测试部署。

我该怎么做才能在Azure中实现自动化构建和部署,同时保持Gitflow?


你的构建流程是使用yaml还是经典模式?我已经测试了分支创建,触发器在分支创建时可以正常工作并触发构建。请分享一下你的构建流程中触发器的分支过滤器?我还没有看到任何官方声明说明这个功能已经改变了。如果你有,请分享一下吧。 - Leo Liu
2
嘿Leo!感谢您的回复。我将使用构建流程更新我的原始帖子。这是描述更改的链接。值得注意的是:我特别从Develop创建一个Release分支,并期望在没有任何更改的情况下(仅仅是分支创建和随后推送到origin),我希望该分支接收CI构建。 - Stephen Vernyi
哇,@StephenVernyi,我曾与FastTrac团队的一位微软工程师合作过,我提到创建新分支时CI未被触发,他甚至说它应该可以工作。从未得到这个答案...因为在那个更新中明确记录了这一点。 你找到解决方法了吗?我也遇到了同样的问题。 - Matt Newbill
@MattNewbill 嘿!不幸的是,直到今天我仍然被困在手动运行构建的泥淖中,以便触发“release/*”分支的测试发布。 - Stephen Vernyi
嘿@StephenVernyi,我有两个解决方法... 1)您可以在创建发布分支的管道中更新版本,提交会触发CI构建 2)您可以尝试使用名为Trigger Build Task的Marketplace任务-在其中,您可以触发任意数量的构建,但是为了使其位于正确的分支上,存在一些复杂性。如果您有兴趣了解更多信息,我可以在下面写一个答案,但是评论限制为大约300个字符。 - Matt Newbill
3个回答

2
我也陷入困境,不知道为什么我的测试构建无法触发。这篇文章帮助了我解释了原因。更多的搜索找到了解决方法,简单地说就是从你的测试构建中删除任何路径检查。
从链接的文档中可以看到:
如果您的管道有路径过滤器,那么它只会在新分支具有匹配该路径过滤器的文件的更改时触发。如果您的管道没有路径过滤器,则它将在新分支中即使没有更改也会被触发。
请参见: 创建新分支时触发程序的行为

-1

不确定您是否正在使用YAML,但是使用GUI,您可以为持续集成添加“路径”过滤器,并设置构建在任何包含“release”的路径时运行。

enter image description here


-2
YAML管道默认在所有分支上配置了CI触发器。 使用YAML定义管道并定义repository资源(repo为简写)时,当提交发生时会触发新的管道运行。您可以进一步配置触发器仅在特定分支上执行。 参见: 示例(默认情况下所有分支):
resources:
- repo: self
  clean: true

pool:
  vmImage: 'ubuntu-20.04'
    
steps:

- task: CMake@1
  displayName: 'Generate Makefile'
  inputs:
    workingDirectory: $(Build.SourcesDirectory)
    cmakeArgs: '-B$(Agent.BuildDirectory) -H.'

- task: Bash@3
  displayName: 'Build project'
  inputs:
    workingDirectory: $(Agent.BuildDirectory)
    targetType: 'inline'
    script: 'make -j4'

限制发布分支(向repository资源添加触发器):

trigger:              # Optional; Triggers are enabled by default
      branches:       # branch conditions to filter the events, optional; Defaults to all branches.
        include:
        - release/*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接