azure-devops - 在 Azure Pipelines 中配置管道依赖项
问题描述
我有 2 个 Azure 管道deploy
和test
. 正如他们的名字所暗示的,一个用于部署产品,另一个用于测试。当开发人员想要在现有部署上运行他们自己的测试时,他们会触发test
. 当需要部署时,它们会触发deploy
. 如果在触发管道test
时管道正在执行中,我希望等待直到完成执行。deploy
deploy
test
有没有办法在 pipeline.yaml 本身中配置这种依赖关系,或者有一种解决方法来实现上述要求
解决方案
有没有办法在 pipeline.yaml 本身中配置这种依赖关系,或者有一种解决方法来实现上述要求
这里有两种方法可以满足您的要求:
1.您可以在 Yaml 管道中添加环境。添加您可以在环境中添加Invoke Rest API检查。Rest API:最新 - 获取
在 Yaml Pipeline 中,您可以调用此环境。
例子:
stages:
- stage: deploy
jobs:
- deployment: DeployWeb
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-latest'
environment: 'EnvironmentName'
strategy:
runOnce:
deploy:
steps:
...
当您运行管道时,环境将检查测试管道的最新构建状态。如果构建完成,它将运行部署管道。
结果:
2.您可以直接在Deploy任务中添加一个Powershell任务来检查Test Pipeline的状态。
$token = "PAT"
$url="https://dev.azure.com/{OrganizationName}/{ProjectName}/_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
echo $buildid
$success = $false
do{
try{
$Buildurl2 = "https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/builds/$($buildid)?api-version=5.0"
$Buildinfo2 = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Buildurl2 -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$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}
你也可以参考我的另一张票。
推荐阅读
- node.js - 在 Firebase Cloud Functions 部署事件上发送松弛消息
- spring-cloud-stream - Spring Cloud Stream 中是否有 MessageQueueMatcher.receivesPayloadThat 的替代方案?
- php - PHP中是否有一种用于爆炸和连接的oneliner
- reactjs - 开玩笑 create-react-app “转换必须导出一个 `process` 函数”
- node.js - 如何使用 Express 从 Nodejs 将发送响应显示为块到前端?
- android - Android 中的 ANR(输入调度超时)(服务器)没有响应
- python - 我如何在可能出现嵌套字典或列表的情况下使用字典理解
- typescript - 我应该如何声明从 fetch 调用返回的 Object 的类型
- javascript - Javascript 如何删除已添加的事件,并在需要时再次添加?
- reactjs - React Navigation - 右键功能