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
我有一个 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