首页 > 解决方案 > Azure Devops 中拉取请求的构建策略是否可以使用在所述 PR 中更新的 yaml 文件?

问题描述

我们已将所有管道检查到代码中,但如果我们在这些管道中提供更改的 PR,PR 构建策略将与 MASTER 中的 YAML 文件一起运行,而不是我们想要检查到 master 中的文件。这基本上是一个僵局。

假设您要删除使所有 PR 都失败的验证,因此您创建了一个 PR,但由于构建策略失败,您无法合并它:P

PS:我知道我可以删除策略,完成合并,然后手动添加策略,但这并不是一个好的解决方案。

标签: azureazure-devopsazure-pipelines

解决方案


使用您在 PR 策略中设置的合并前构建步骤创建一个单独的 yaml 管道。它将始终从创建 PR 的当前分支运行代码。

我们这样做:(都在同一个仓库中)

  1. build_steps.yml - 带有构建步骤的 Yaml 模板
  2. azure-pipelines-yml - 引用 build_steps.yml 来构建项目的主管道
  3. pre_merge.yml - 仅由 PR 请求运行的辅助管道,该请求具有对 build_steps.yml 的引用,因此构建没有差异,如果发生变化,则有两个地方需要更新。

整个 yaml 定义:

#pre_merge.yml
trigger: none #Pipeline should never trigger on any branches. Only invoked by the policy.

variables:
  - name: system.buildConfiguration 
    value: 'Release'

  - name: system.buildPlatform
    value: 'win10-x86'

  - name: system.debug
    value: 'false'

pool:
  vmImage: 'windows-latest'

name: $(SourceBranchName)_$(date:yyyyMMdd)$(rev:.r)

steps:
- template: build_steps.yml

然后在你这样设置的策略中: 在此处输入图像描述

所有这些也适用于经典管道。您需要创建一个单独的合并前构建管道,该管道可以使用主构建管道中使用的步骤引用任务组。在这两种情况下,您都不必使用模板或任务组并手动创建步骤。但是,如果将来构建会发生变化,那么您有 2 个地方需要更新。


推荐阅读