使用分支策略和构建验证时 Azure DevOps Pipeline 双触发

Azure DevOps Pipeline double triggered when using branch policies and build validation

由于 Azure DevOps Pipelines 没有 Azure Repos 的 PR 触发器,你应该使用 Branch Policies

我已经设置好了,所以你必须打开一个 PR 才能合并到 production,你不能直接推送到 production

我还在 PR 中添加了一个 Build Validation。应该做的是,一旦创建了 PR,它将(最终……婴儿步骤)构建、运行 单元测试、集成测试等。如果它们通过,该部分将在 PR 清单中被选中,并且最终它可以被批准到 production 并部署到 Kubernetes。

无论如何,我 运行 关注的问题是如何设置 azure-pipelines.yaml。当前正在发生的事情是,一旦将短期分支推送到远程 (git push origin test-branch),它就会触发管道,然后在创建 PR 请求时再次触发。我只希望它在创建 PR 时 运行 而我不知道如何设置 azure-pipelines.yaml 来执行此操作。

这是我正在测试的内容:

trigger:
  branches:
    exclude:
    - production
  paths:
    include:
    - admin
    - admin-v2
    - api
    - client
    - k8s
    - templates
    - azure-pipelines.yaml

resources:
- repo: self

variables:

  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '<GUID>'
  imageRepository: 'apptest'
  containerRegistry: 'apptestacr.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)'
  tag: '$(Build.BuildId)'
  imagePullSecret: 'apptestacr8a25-auth'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

stages:
- stage: Changes
  jobs:
  - job: Changes
    steps:
    - bash: |
        changedServices=$(git diff $(git branch --show-current) production --name-only | awk -F'/' 'NF!=1{print }' | sort -u)
        echo $changedServices

很容易看出它在 git push 上触发的原因:它正在查看除 production 之外的每个分支。我也试过完全删除 trigger 部分,它仍然做同样的事情。

这是我的构建验证设置:

我应该如何设置它来完成此功能(仅通过构建验证在 PR 上触发)?

好的,看起来像下面的工作:

trigger: none

关于它的文档:Opting out of CI

当我将更改推送到 repo 时它没有触发,但是当我打开 PR 时触发。