我有50多个用于生产环境的发布管道,每次进行生产时都必须手动批准这些管道中的每个以进行部署。
是否有任何自动化方法,只需单击一下即可批准并部署所有管道?
答案 0 :(得分:0)
我知道实现此目标的唯一方法是将50多个管道组合到一个主版本中,并使那些依赖于一个单独阶段的人部署到封闭环境中。在该环境上分配批准。因此,一旦“批准环境”中的该阶段获得批准,所有后续阶段都将运行。
答案 1 :(得分:0)
在Azure DevOps中,我们可以配置批准,它会检查该阶段中使用的所有资源,例如源代码并跟踪已部署的目标服务器,这应该让管理人员检查并同意此部署,而批量批准是没有意义的。 / p>
如果您坚持要同时批准多个发布管道阶段。我们建议您删除这些批准。
或者我们可以使用API来list all Approvals并获取批准ID,然后是update status of an approval。 此外,如果准备中有多个批准,则只会批准当前阶段。
步骤:
创建PAT令牌->创建构建管道->单击tab变量并添加变量pat = {Token}
,然后将其设置为secret变量->添加任务powershell并输入以下脚本进行批准。>
$connectionToken="$(pat)"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PipelineUrl = "https://vsrm.dev.azure.com/{Org name}/{Project name}/_apis/release/approvals?api-version=5.1"
$Pipelines = (Invoke-RestMethod -Uri $PipelineUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$ ApprovalId = $Pipelines.value.id
Write-Host $ ApprovalId
# List all Approvals and get approval id
ForEach ($Id in $ ApprovalId)
{
$baseUrl = "https://vsrm.dev.azure.com/{Org name}/{Project name}/_apis/release/approvals/$($Id)?api-version=5.1"
$body ="{
`"status`": `"approved`"
}"
$response = Invoke-RestMethod -Uri $baseUrl -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PATCH
}