试图将文档(https://docs.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers)组合在触发器/资源上,以创建一组管道,这些管道将具有由提交触发的构建管道,并且当该管道完成时,部署管道会消耗工件并进行部署。之所以拥有一个单独的构建和部署管道,是因为要对提交在主线中的PR进行批处理提交(读为:master)
当对仓库进行提交时手动触发构建时,以下管道文件可以工作,同时启动两个管道。那不是想要的。如果从部署管道中删除了触发器,则管道触发器的管道将正常工作。
我们想要
name: $(date:yyyy).$(date:MM).$(date:dd)$(rev:.r)
trigger:
- master
- feature/*
pool:
vmImage: 'ubuntu-latest'
variables:
artifactsName: "artifacts"
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Executing Build"
Write-Host "Creating Artifacts"
New-Item -Type Directory -Path $(artifactsName)
$artifactPath = Join-Path -Path $(artifactsName) -ChildPath "$(Build.BuildNumber).txt"
Set-Content -Path $artifactPath -Value "$(Get-Date)"
pwsh: true
- task: PublishPipelineArtifact@1
inputs:
targetPath: $(artifactsName)
artifactName: buildartifacts
resources:
pipelines:
- pipeline: buildpipeline
source: -splitpipeline-build
trigger:
branches:
include:
- master
- feature/*
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo Deploy Step
displayName: 'Deploy'
答案 0 :(得分:0)
如果要避免在提交后运行,则必须将trigger: none
添加到deploy-pipeline.yml
中。还可能需要pr: none
,因为在创建请求请求时管道可能会运行。总结一下您需要的作品:
build-pipeline.yml
name: $(date:yyyy).$(date:MM).$(date:dd)$(rev:.r)
trigger:
- master
- feature/*
pool:
vmImage: 'ubuntu-latest'
variables:
artifactsName: "artifacts"
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Executing Build"
Write-Host "Creating Super Artifacts"
New-Item -Type Directory -Path $(artifactsName)
$artifactPath = Join-Path -Path $(artifactsName) -ChildPath "$(Build.BuildNumber).txt"
Set-Content -Path $artifactPath -Value "$(Get-Date)"
pwsh: true
- task: PublishPipelineArtifact@1
inputs:
targetPath: $(artifactsName)
artifactName: buildartifacts
deploy-pipeline.yml
resources:
pipelines:
- pipeline: buildpipeline
source: stackoverflow\kmadof.dm-so-15-a
trigger:
branches:
include:
- master
- feature/*
trigger: none
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo Deploy Step
displayName: 'Deploy'
请检查doc以获得更多详细信息:
同时指定CI触发器和管道触发器时,可以 期望每次(a)对 仓库和(b)上游管线的运行已完成。 考虑一个依赖于A的管道B的示例。 假设这两个管道都使用相同的存储库 源代码,并且它们都还配置了CI触发器。 当您将更新推送到存储库时,然后:
- A的新运行开始。
- 与此同时,新的B运行是 开始。此运行将消耗先前从中产生的工件 答:
- A完成后,将触发另一次B运行。
为防止 在此示例中触发两次B运行,必须删除其CI 触发器或管道触发器。