azure-devops - 如果阶段 A 或阶段 B 成功,经典管道如何部署到阶段?
问题描述
我有阶段 A、B 和 C。如果阶段 A 或阶段 B 成功,我希望部署阶段 C。但是当我对阶段 C 使用“阶段后”部署触发器时,它只允许我在阶段 A 和阶段 B 成功时触发部署。(这是一个经典的管道)有没有办法做到这一点?
我曾考虑过简单地拥有两个相同的阶段 C(一个在 A 之后,一个在 B 之后),但这很快就会导致我需要大量重复的阶段并产生技术债务。
解决方案
如果阶段 A 或阶段 B 成功,经典管道如何部署到阶段?
直接的方法是添加两个相同的阶段C,(一个在A之后,一个在B之后)。
但如果这不是你的选择。还有一种解决方法是在阶段 B 成功时使用Update Release Environment rest api来触发阶段 C。请参见以下步骤:
1、设置C阶段仅在A阶段后自动触发。
设置管理部署以允许帐户yourProjectname Build Service(Your Organization)。此权限将允许您更新发布管道中的发布环境。
3、进入B阶段-->在代理工作部分-->检查Allow scripts to access the OAuth token
。此设置将允许您在发布管道中使用访问令牌。
4、经过以上准备,现在可以在B阶段的末尾添加一个脚本任务来调用release rest api。请参见以下 powershell 任务中的示例:
#Get releaseresponse
$Releaseurl= "https://vsrm.dev.azure.com/{yourOrg}/$(System.TeamProject)/_apis/Release/releases/$(Release.ReleaseId)?api-version=6.0-preview.8"
$releaseresponse = Invoke-RestMethod -Method Get -Headers @{Authorization = "Bearer $(system.accesstoken)"} -ContentType application/json -Uri $Releaseurl
#Get the environment ID of C stage from the release response:
$id = $releaseresponse.environments | Where-Object{$_.name -match "API-Test"} | select id
#Create the JSON body for the deployment:
$deploymentbody = @"
{"status": "inprogress"}
"@
#Invoke the REST method to trigger the deployment to C stage:
$DeployUrl = "https://vsrm.dev.azure.com/{yourOrg}/$(System.TeamProject)/_apis/release/releases/$(Release.ReleaseId)/environments/$($id.id)?api-version=6.0-preview.7"
$DeployRelease = Invoke-RestMethod -Method Patch -ContentType application/json -Uri $DeployUrl -Headers @{Authorization = "Bearer $(system.accesstoken)"} -Body $deploymentbody
以上脚本首先调用get Release rest api获取C阶段的环境id。然后调用更新发布环境rest api触发部署到C。
这样上面的脚本就可以实现B阶段成功后触发C阶段。
推荐阅读
- c# - 将多个 WPF 用户定义的组合框绑定到同一个 Observable 集合
- c# - 如何拒绝来自其他应用程序的 HTTP POST 请求?
- c# - 当同时提交两个或多个请求时,ActionMethodSelectorAttribute 中的 AmbiguousMatchException
- ajax - JSF 自定义异常处理程序不适用于 ajax
- python - 枕头图像打开保存未按预期工作
- javascript - 使用 Mocha 和 Vanilla Javascript 进行事件测试
- c# - 如何修复 POST 到机器人端点的 HTTP 状态为 417 失败?
- api - Google App Engine Search API 和 PhonenumberUtil 不起作用
- pkcs11interop - 多平台发行版上的类型定义和各种类型的大小
- python - python中并行任务的好习惯