是Azure DevOps构建管道,是否可以从另一个作业中取消一个管道作业?

时间:2019-08-12 18:13:49

标签: azure-devops azure-pipelines

我有一个Azure DevOps构建管道,其中包含两个代理作业,我将它们称为作业A和作业B。我希望这些作业同时运行,但是如果作业A失败,则不需要作业B运行完成。

如果作业A的任何任务失败,是否有任何方法可以将作业添加到作业A,从而取消作业B(或者以“失败”状态终止整个管道)?

2 个答案:

答案 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)

结果:

enter image description here

答案 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