首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以通过编程方式取消Azure DevOps管道作业?

是否可以通过编程方式取消Azure DevOps管道作业?
EN

Stack Overflow用户
提问于 2020-05-27 21:16:24
回答 1查看 11.8K关注 0票数 12

因为可以停止Azure DevOps流水线中的单个步骤:

代码语言:javascript
复制
echo "##vso[task.complete result=Succeeded;]DONE"

请参阅:https://github.com/microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md#task-logging-commands

是否也可以检查一个条件并停止整个流水线运行或作业?

PS。我知道,您可以为作业设置条件,但在我的示例中,整个流水线是单个作业,由于其他原因,将其拆分为多个作业是没有意义的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-27 22:19:00

您可以通过REST API取消构建:

代码语言:javascript
复制
PATCH https://dev.azure.com/atbagga/atbagga/_apis/build/Builds/120
Request content: {'status': 'Cancelling'}

下面是一个示例:

代码语言:javascript
复制
steps:
- task: PowerShell@2
  name: ConditionalStep
  inputs:
    targetType: 'inline'
    script: |
      Write-Host "I'm here"
      Write-Host ('$(SomeVariable)' -eq 'Stop')
      if ('$(SomeVariable)' -eq 'Stop') {
        $uri = "https://dev.azure.com/thecodemanual/DevOps Manual/_apis/build/builds/$(Build.BuildId)?api-version=5.1"

        $json = @{status="Cancelling"} | ConvertTo-Json -Compress

        $build = Invoke-RestMethod -Uri $uri -Method Patch -Headers @{Authorization = "Bearer $(System.AccessToken)"} -ContentType "application/json" -Body $json

        Write-Host $build
      }
      Write-Host "And now here!"
    pwsh: true
- pwsh: Start-Sleep -Seconds 60    
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $uri = "https://dev.azure.com/thecodemanual/DevOps Manual/_apis/build/builds/$(Build.BuildId)/timeline?api-version=5.1"

      Write-Host $uri

      # Invoke the REST call
      $build = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization = "Bearer $(System.AccessToken)"} -ContentType "application/json"

      $taskResult = $build.records | Where-Object {$_.name -eq "ConditionalStep" } | Select-Object result

      Write-Host $taskResult.result

    pwsh: true

为此,您将获得该输出:

如果你得到这样的错误:

| {"$id":"1","innerException":null,“message”:“访问被拒绝。|生成手动生成服务( DevOps )需要团队项目| DevOps手册中的vstfs:/ Build /Build/1611vstfs:/Build/Build/1611.”,errorCode Microsoft.TeamFoundation.Build2.WebApi","typeKey":"AccessDeniedException","errorCode":0,"eventId":3000}

请确保您的生成帐户具有停止生成的权限:

您可以在此部分找到以下内容:

请注意

您不能做的是将构建设置为已完成。如果你涂了这个的话。整个流水线仍将被执行。因此,如果这不是您想要的,您需要向每个步骤添加条件,并在管道中预先设置一个输出变量,这样就可以忽略这些步骤。

代码语言:javascript
复制
steps:
- task: PowerShell@2
  name: ConditionalStep
  inputs:
    targetType: 'inline'
    script: |
      Write-Host "I'm here"
      Write-Host ('$(SomeVariable)' -eq 'Stop')
      if ('$(SomeVariable)' -eq 'Stop') {
        Write-Host '##vso[task.setvariable variable=shouldStop;isOutput=true]Yes'
      }
      Write-Host "And now here!"
    pwsh: true
- pwsh: Start-Sleep -Seconds 60
  condition: ne(variables['ConditionalStep.shouldStop'], 'Yes')
- task: PowerShell@2
  condition: ne(variables['ConditionalStep.shouldStop'], 'Yes')
  inputs:
    targetType: 'inline'
    script: |
      $uri = "https://dev.azure.com/thecodemanual/DevOps Manual/_apis/build/builds/$(Build.BuildId)/timeline?api-version=5.1"

      Write-Host $uri

      # Invoke the REST call
      $build = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization = "Bearer $(System.AccessToken)"} -ContentType "application/json"

      $taskResult = $build.records | Where-Object {$_.name -eq "ConditionalStep" } | Select-Object result

      Write-Host $taskResult.result

    pwsh: true
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62044055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档