目前在yaml管道中不支持手动部署到阶段。请查看开放问题。
您可以尝试为每个阶段添加dependsOn和condition。对于下面的示例yaml管道,只有在阶段Start成功完成后,阶段Build才会开始运行,然后阶段Build将等待批准,只有在阶段Build得到批准并成功完成后,阶段Release才会被触发。
您可以定义pr trigger并设置autocancel=true
(默认为true),以取消先前运行,如果新更改已推送到同一pr。
trigger
的 batch 属性可以实现类似的效果。如果当前的 pr 仍在构建中,它将不会启动新的运行。
trigger:
batch: boolean
branches:
include:
_
pr:
autoCancel: true
branches:
include:
- master
stages:
- stage: Start
jobs:
- job: A
pool:
vmImage: windows-latest
steps:
- powershell: |
echo "i am job a"
- stage: Build
dependsOn: Start
condition: succeeded()
jobs:
- deployment: Dev
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-16.04'
environment: 'Dev'
strategy:
runOnce:
deploy:
steps:
- script: echo "i am dev environment"
- stage: Release
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Environ
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-16.04'
environment: 'Environment'
strategy:
runOnce:
deploy:
steps:
- script: echo "i am Environment environment"
更新: 通过powershell脚本取消正在进行的构建。
您可以在管道顶部添加一个powershell任务来调用构建API。以下脚本获取所有正在进行的构建并取消它们,但保留当前构建。
- task: PowerShell@2
inputs:
targetType: inline
script: |
$header = @{ Authorization = "Bearer $(system.accesstoken)" }
$buildsUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?api-version=5.1"
echo $buildsUrl
$builds = Invoke-RestMethod -Uri $buildsUrl -Method Get -Header $header
$buildsToStop = $builds.value.Where({ ($_.status -eq 'inProgress') -and ($_.definition.name -eq "$(Build.DefinitionName)") -and ($_.id -ne $(Build.BuildId))})
ForEach($build in $buildsToStop)
{
echo $build.id
$build.status = "cancelling"
$body = $build | ConvertTo-Json -Depth 10
$urlToCancel = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$($build.id)?api-version=5.1"
echo $urlToCancel
Invoke-RestMethod -Uri $urlToCancel -Method Patch -ContentType application/json -Body $body -Header $header
}
为了让您的流水线有权限取消当前正在运行的构建。您需要进入您的流水线,单击3个点,并选择“管理安全性”。
![enter image description here](https://istack.dev59.com/3JvrV.webp)
然后将用户
Project Collection Build Service(projectName) 的
停止构建 权限设置为允许。
![enter image description here](https://istack.dev59.com/lUPWa.webp)