Azure Devops 管道通过生成验证触发两次

Posted

技术标签:

【中文标题】Azure Devops 管道通过生成验证触发两次【英文标题】:Azure Devops pipeline triggering twice with Build Validation 【发布时间】:2021-10-09 14:11:40 【问题描述】:

我在我的存储库中创建了一个管道,用于通过对推送到features/* 分支的代码执行单元测试来验证代码。相同的管道被用作构建验证管道集作为开发分支上的分支策略来验证传入的 PR。这是管道的触发器。

# pipeline.yml
trigger:
  batch: false
  branches:
    include:
      - features/*

但是我们遇到了以下情况:给定来自 refs/heads/features/azure-pipelines -> refs/heads/develop 的开放 PR,我们在 features/azure-pipelines 分支上推送提交。

这会导致管道触发两次。据我了解,其中一次运行是由于管道的触发(屏幕截图上标记为单个 CI 的那个),第二次运行是由于分支策略试图验证代码被推送到开放 PR 上进行开发。 (公关自动化)

有什么方法可以禁用其中一个处决,因为它本质上是重复的?我可能正在寻找一种方法来检索打开的 PR 并中止执行 Individual CI 的管道,如果分支有打开的 PR,但我不确定这是最好的解决方法,我正在寻找选项。

【问题讨论】:

【参考方案1】:

你可以设置

trigger: none

这样只有分支策略会触发管道。

【讨论】:

【参考方案2】:

有什么方法可以禁用其中一个执行,因为它本质上是重复的?

正如我们所知,除非我们取消构建验证,否则我们无法禁用在开发分支上设置为分支策略的构建验证管道来验证传入的 PR。

对于您的情况,您可以尝试在提交消息或 HEAD 提交的描述中包含 [skip ci],以在您计划将功能分支合并到开发分支时使 Azure Pipelines 跳过运行 CI。

您可以查看文档Skipping CI for individual commits 了解更多详细信息。

【讨论】:

这不是最优雅的解决方案,因为我们更喜欢自动解决方案,但它可以完成工作,所以我接受了。【参考方案3】:

这取决于他们是否这样做。您可以在管道中进行条件检查,为 PR 和 CI 运行执行不同的操作。但是,我很确定这是不可能的,因为一个是在 YAML 上定义的,另一个是在 Azure DevOps 门户上定义的。因此,即使您在 YAML 中解除 PR 触发器,分支策略仍会运行 PR。您可以在 YAML 中指定 antyhing 来阻止分支策略。

【讨论】:

以上是关于Azure Devops 管道通过生成验证触发两次的主要内容,如果未能解决你的问题,请参考以下文章

Azure Devops:管道生成新工件时继续部署不会触发

如何通过 SSH 在 azure devops 管道复制文件中使用公钥

基于用于触发管道 Azure Devops 的分支指定构建分支

Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器

如何排除对管道 yaml 文件的更改以触发构建 i azure devops?

是否有在本地验证 Azure DevOps Pipeline 的工具?