执行Mutliple发布管道

时间:2020-07-30 10:55:43

标签: azure-devops azure-pipelines

我有50多个用于生产环境的发布管道,每次进行生产时都必须手动批准这些管道中的每个以进行部署。

是否有任何自动化方法,只需单击一下即可批准并部署所有管道?

2 个答案:

答案 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 
}