azure-devops - 如何在 Azure DevOps 中获取正在进行的管道的构建 ID
问题描述
我正在通过 API 调用从发布管道触发构建管道作为第一个任务,并且没有任何问题。
第二个任务- 管道需要等待,直到第一个任务触发的管道完成,然后转到第三个任务。我如何实现它?
我在下面的 powershell 任务中尝试从正在运行的管道中获取构建 ID,并尝试通过循环等待,但无法获取构建 ID
触发构建管道的第一个任务
curl -L -X POST 'https://dev.azure.com/Org/project/_apis/build/builds?definitionId-1549&api-version=6.1-preview.6' -H 'Authorization: $(ADO_BASIC_AUTH)' -H 'Content-Type: application/json' --data '{"definition": {"id": 1549}}'
您建议的第二个任务
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$(ADO_BASIC_AUTH)"))
$header = @{ Authorization = "Basic $B64Pat" }
$continueCurrent = $true
$uriGetActiveBuilds1 = "https://dev.azure.com/org/project/_apis/build/builds?definitions=1549&statusFilter=inProgress,notStarted&api-version=5.1"
do
{
$continueCurrent = $true
$resultStatus = Invoke-RestMethod -Uri $uriGetActiveBuilds1 -Method Get -ContentType "application/json" -Headers $header
if ($resultStatus.count -gt 0)
{
$continueCurrent = $false
Write-Host " . "
Start-Sleep -s 10
}
}while($continueCurrent -eq $false)
Write-Host "Continue task"
即使从第一个任务触发的构建管道完成,第二个也会继续等待
我的管道的输出
解决方案
您可以使用另一种方式。在您的版本中添加一个新变量:
然后在脚本中使用它来定义构建 ID 并仅获取排队构建的状态。
运行构建并传递构建 ID:
$user = ""
$token = "<pat>"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$orgUrl = "https://dev.azure.com/<org>"
$teamProject = "<team_project>"
$buildDefId = <build_definition_id>
$body = '{"definition":{"id":<dev_id>}}' -replace "<dev_id>", $buildDefId
$uriRunBuild = "$orgUrl/$teamProject/_apis/build/builds?api-version=5.1"
$resultQueue = Invoke-RestMethod -Uri $uriRunBuild -Method Post -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$buildId = $resultQueue.Id
Write-Host "Build Id: $buildId"
Write-Host "##vso[task.setvariable variable=Custom.BuildId]$buildId"
然后使用构建 id 获取构建状态:
$user = ""
$token = "<pat>"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$orgUrl = "https://dev.azure.com/<org>"
$teamProject = "<team_project>"
$uriGetBuild = "$orgUrl/$teamProject/_apis/build/builds/$(Custom.BuildId)?api-version=5.1"
$uriGetBuild
$buildStatus = ""
do
{
$buildResult = Invoke-RestMethod -Uri $uriGetBuild -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$buildStatus = $buildResult.status
if ($buildStatus -ne "completed")
{
Write-Host " . "
Start-Sleep -s 2
}
}while($buildStatus -ne "completed")
Write-Host "Continue task"
推荐阅读
- angular - 离子角度错误错误:未捕获(承诺):错误:参数数组必须有参数。错误:参数数组必须有参数
- wix - 如何防止 WiX 安装程序删除安装前存在的空文件夹
- asp.net-mvc-4 - 如何在 mvc4 中创建 URL
- django - 将模型字段默认设置为 shortuuid.uuid() 不会生成唯一值
- html - CSS 样式复选框标签 if在里面
- pandas - Seaborn relplot 和散点图相对于图例的标记大小不正确
- openthread - openthread/environment docker rsyslogd:imklog:无法打开内核日志(/proc/kmsg):不允许操作
- python - 如何从 .pb 转换为 .tflite?
- deep-learning - 操作数不能与形状一起广播
- r - 将 lm 输出列表转换为数据帧