我已经设置了应用程序构建发布管道和测试自动化发布管道是分开的。目前,只要创建了构建,然后测试自动化就会开始,这是错误的,因为构建工件刚刚发布但尚未部署,这将由发布完成管道。所以我正在寻找一种解决方案,我可以将触发器添加到测试发布管道中,它将检查构建发布管道是否已完成并将代码部署到环境中。
2 回答
如果你在一个 yml 文件中有这个,你可以使用ondependsOn
和buildStage
用于stage中先前阶段的成功状态deployStage
condition
AutomationTestsStage
stages:
- stage: 'AutomationTestsStage'
dependsOn:
- buildStage
- deployStage
condition: succeeded()
根据您的描述,您有三个管道,构建管道(构建和发布工件)、应用程序发布管道和测试自动化发布管道。您已经设置了一个 CD 触发器,该触发器将在管道完成后一起触发发布管道。但是您希望管道运行的顺序是构建管道->应用程序发布管道->测试自动化发布管道,对吗?
所以我正在寻找一种解决方案,我可以将触发器添加到测试发布管道中,它将检查构建发布管道是否已完成并将代码部署到环境中。
作为一种解决方法,我们需要打开测试自动化发布管道定义并禁用CD触发器,然后打开打开应用程序发布管道,在作业结束时添加任务电源外壳并调用REST API来触发发布管道(测试自动化发布管道)。
电源外壳脚本:
$token = "{PAT}"
$url = "https://vsrm.dev.azure.com/{Org name}/{Project name}/_apis/Release/releases?api-version=5.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @"
{
"definitionId": {test automation release pipeline definition ID}
}
"@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -ContentType application/json -body $JSON
}
此外,我们需要将 Power Shell 条件设置为Only when all previous tasks have succeeded
,查看下图。
现在,它将在之后运行发布测试自动化发布管道build release pipeline is completed & code is deployed to the environment