我有一个Azure DevOps构建管道,其中包含两个代理作业,我将它们称为作业A和作业B。我希望这些作业同时运行,但是如果作业A失败,则不需要作业B运行完成。
如果作业A的任何任务失败,是否有任何方法可以将作业添加到作业A,从而取消作业B(或者以“失败”状态终止整个管道)?
答案 0 :(得分:2)
添加一个在任务失败时取消管道的PowerShell任务:
steps:
- powershell: |
Write-Host "Cancel all jobs..."
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds/$($env:BUILD_BUILDID)?api-version=2.0"
$header = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
$body = @{ 'status'='Cancelling' } | ConvertTo-Json
Invoke-RestMethod -Uri $url -Method Patch -Body $body -Headers $header -ContentType application/json
displayName: Cancel the pipeline
condition: failed()
env:
System_AccessToken: $(System.AccessToken)
结果:
答案 1 :(得分:0)
@ shayki-abramczyk脚本的bash等效项(感谢btw!)
- bash: |
echo "Cancel all jobs..."
url="${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${SYSTEM_TEAMPROJECTID}/_apis/build/builds/${BUILD_BUILDID}?api-version=2.0"
curl -X "PATCH" "$url" \
-H "Authorization: Bearer ${SYSTEM_ACCESSTOKEN}" \
-H 'Content-Type: application/json' \
-d $'{"status":"Cancelling"}'
displayName: Cancel the pipeline
condition: failed()
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
您还必须在azure devops,“权限”,“组”中进入项目设置,编辑“构建管理员”组,然后向其中添加“项目集合构建服务”(yourcompanyhere)用户。
此外,还有关于失败取消的快速注释。根据文档,有一个“结果”字段,其中包含一个失败的选项,但“状态”字段没有。我尝试了仅更新一个而不是另一个的许多排列,但是status = cancelling一个是唯一可靠的排列,在任何情况下我都无法将其显示为“ failed”:(
构建api更新方法的文档在这里: https://docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/update%20build?view=azure-devops-rest-6.0