使用分支策略和构建验证时 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 时触发。
由于 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 时触发。