Azure Devops 管道,知道管道何时完成的方法,使用自托管代理

Azure Devops pipeline , way to know when pipeline is done , using self hosted agent

我有一个 Azure 管道,我使用 azure rest 调用它 API

https://dev.azure.com/xxx/xxx_connection/_apis/pipelines/2/runs

一切正常,我将安装自托管 Linux 代理的源文件发送到 azure,并将它们重新编译到自托管 Linux 代理中。

我的问题是如何知道管道何时在托管自托管 Linux 代理的服务器中完成?

有回调吗?或者 API 我可以调用并查询管道作业是否完成?
或者只是在我接受获取编译产品的目录上做 while 循环? 我想避免的最后一个选项。

您可以使用 Runs - Get API:

GET https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs/{runId}?api-version=6.1-preview.1

并在响应中检查 result(应该是 succeeded)。

当您使用您在响应中提到的 API 调用管道时,您可以获得 runId

您还可以通过以下方式了解管道是否已完成。

1,使用 Runs-Get or Latest - Get API 得到 Shayki Abramczyk 提到的构建结果。

2,您可以设置一个 service hook. For below example a web hook 在完成选定的构建管道时触发。

3、可以查看扩展CatLight。 CatLight 应用程序将在构建开始和完成时通知您。

4,在构建完成事件上创建自定义通知并订阅。管道完成后,您将收到电子邮件通知。查看 tutorial here 了解更多信息。

您可以每 30 秒轮询一次管道以了解您的构建状态,一旦状态成功,脚本将退出。

$user="$(USER)"
$token="$(TOKEN)"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$buildInfo = ( Invoke-RestMethod -Method Get -UseDefaultCredentials -Uri "https://tfs.com/tfs/Organization/Project/_apis/build/builds/${buildID}?api-version=6.1-preview.6" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} )
Write-Host "Build URL : " "https://tfs.com/tfs/Organization/Project/_build/results?buildId=$buildID"
      while($buildInfo.status -eq "inProgress" -or $buildInfo.status -eq "notStarted") # keep checking till build completed
      {
       Write-Output "Build is $($buildInfo.status) Sleep for 30 seconds."
       Start-Sleep -Seconds 30 # Start sleep for 30 seconds
       $buildInfo = ( Invoke-RestMethod -Method Get -UseDefaultCredentials -Uri "https://tfs.com/tfs/Organization/Project/_apis/build/builds/${buildID}?api-version=6.1-preview.6" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} )
      }

      Write-Output "Build Status : $($buildInfo.status)" # print build status
      Write-Output "Build Result : $($buildInfo.result)" # print build result