Azure DevOps Releases 跨分支构建管道

时间:2021-01-25 01:27:37

标签: git azure azure-devops

我们有一个通过 Azure DevOps 构建的产品。该产品由大约 20 个不同的服务组成,每个服务都构建在自己的管道中。在每个管道的末尾,我们使用构建 ID 作为该映像的 ID 将输出(一个 docker 映像)推送到 Azure 容器注册表。

然后,我们有一个 DevOps Release,可部署到我们的测试(然后是 Prod)环境中。它会为每个管道查找最新版本,并使用该 ID 来确定要为每个服务部署的相关映像。

我现在正在尝试构建一个新的 DevOps 版本,这将允许我们的 QA 团队将给定的分支部署到新的 QA 环境。我希望用户能够选择一个分支并让 DevOps 确定该特定分支的每个管道的最后一次构建 - 或者如果该分支从未为给定管道构建过,则回退到最后一个主分支构建管道。

我看不到如何添加一个 Branch 变量,该变量将在触发手动构建时重新计算工件。而且,虽然我可以让它找到特定分支的最新构建,但如果没有为该分支完成构建,则无法让它回退到 Master。

可以这样做吗?如果没有,是否还有其他方法可以达到相同的结果?

1 个答案:

答案 0 :(得分:1)

<块引用>

我现在正在尝试构建一个新的 DevOps 版本,这将允许我们的 QA 团队将给定的分支部署到新的 QA 环境。我希望用户能够选择一个分支并让 DevOps 确定该特定分支的每个管道的最后一次构建

您正在创建一个新的发布管道定义来部署 QA 环境,而此发布管道仅部署 QA 环境,对吗?如果是,我们可以配置阶段Pre-deployment conditions。步骤:打开 Pre-deployment conditions->enable Artifact filters,查看下图。

enter image description here

<块引用>

我看不到如何添加一个 Branch 变量,该变量将在触发手动构建时重新计算工件。而且,虽然我可以让它找到特定分支的最新构建,但如果没有为该分支完成构建,则无法让它回退到 Master。

我们可以添加任务 bash 并输入脚本 printenv 以列出所有变量并检查构建源分支。检查下面的示例,如果没有为该分支完成构建,我们可以获得最新的主分支构建 ID。

$URL="https://dev.azure.com/{Org name}/{project name}/_apis/build/Builds?branchName=refs/heads/{target branch}&definitions={build definition ID}"
$PAT="{PAT}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))

$Result = Invoke-RestMethod -Uri $URL -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get
If($Result.count -eq "0")
{
#back to Master if no build has been done for the target Branch 
$MasterBranchURL = "https://dev.azure.com/{Org name}/{project name}/_apis/build/Builds?branchName=refs/heads/master&definitions={build definition ID}"
$MasterBranchResult = Invoke-RestMethod -Uri $MasterBranchURL -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get

    foreach($Build in $MasterBranchResult.value){
       If($Build.result -eq "succeeded"){
       #Get the master branch latest success build ID
       $ID = $Build.id
       echo "##vso[task.setvariable variable=BuildID;isOutput=true]$ID"
       break
       }
    }
}
相关问题