azure - Azure devops 构建管道依赖于其他构建管道
问题描述
我有四个项目。一个是其他三个项目的共同项目。
其他三个项目构建管道依赖于通用构建管道。当公共构建管道正在进行时,其他三个构建管道应该等到公共构建完成。如何在本地 azure devops 中实现这一目标?
解决方案
如何在本地 azure devops 中实现这一目标?
您可以在其他三个管道的开头添加一个 PowerShell 任务。
这是 Powershell 脚本示例:
$token = "PAT"
$url="https://{instance}/{collection}/{project}/_apis/build/definitions/{definitionId}?includeLatestBuilds=true&api-version=5.1"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$buildid = $response.latestBuild.id
$success = $false
do{
try{
$Buildurl2 = "https://{instance}/{collection}/{project}/_apis/build/builds/$($buildid)?api-version=5.0"
$Buildinfo2 = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Buildurl2 -Headers @{Authorization=("Basic {0}" -f $token)}
$BuildStatus= $Buildinfo2.status
$result = $Buildinfo2.result
echo $result
echo $BuildStatus
if($BuildStatus -eq "completed") {
write-output "No Running Pipeline, starting Next Pipeline"
$success = $true
} else {
Write-output "Pipeline Build In Progress, Waiting for it to finish!"
Write-output "Next attempt in 30 seconds"
Start-sleep -Seconds 30
}
}
catch{
Write-output "catch - Next attempt in 30 seconds"
write-output "1"
Start-sleep -Seconds 30
# Put the start-sleep in the catch statemtnt so we
# don't sleep if the condition is true and waste time
}
$count++
}until($count -eq 2000 -or $success -eq $true )
if ($result -ne "succeeded")
{
echo "##vso[task.logissue type=error]Something went very wrong."
}
if(-not($success)){exit}
解释:
此 powershell 脚本运行以下两个 Rest API:</p>
该脚本检查正在进行的管道状态(通过轮询)。如果管道完成并且结果成功,它将运行其他三个管道。或者它将等待管道完成构建。
结果样本:
推荐阅读
- abap - 如何在 TEST-INJECTION 之外获取变量?
- python - 开发人员将自定义 python 库放在哪里进行导入
- java - 我应该用什么来比较密码应用程序上的前两个输入字符串
- javascript - 如何在从抽象类扩展超级类的同时使用它
- android - 触摸文本字段外后如何隐藏键盘?
- google-analytics-api - 如何通过 Google Analytics API 从“页面加载时间”报告中获取数据?
- python - 在 Python 中使用滚动条显示大图像
- reactjs - 在 Preact 中渲染 React 组件?
- java - 使用 AspectJ 与 SpringInterceptor 保护应用程序
- html - 有没有办法将 div 对齐为具有不同高度和宽度的网格?