【问题标题】:Azure DevOps Releases get pipeline build across branchesAzure DevOps Releases 跨分支构建管道
【发布时间】:2021-04-28 20:22:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您好,刚刚检查一下这个问题现在是否仍然阻碍您?这个问题有什么更新吗?如果有什么误解,能否重新描述一下场景的更多细节?
  • 我已经成功了。但是,使用 Node.JS 来确定构建 ID 而不是 bash 脚本,因为提供的 bash 脚本不起作用。感谢您的帮助!
  • 您好,如果这个答案有帮助,您会接受它作为答案吗?或者请在这里分享您的解决方案并接受它。因此,它可以帮助遇到相同问题的其他社区成员,我们可以存档此线程。谢谢。祝你今天过得愉快。 :)

标签: git azure azure-devops


【解决方案1】:

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

您正在创建一个新的发布管道定义来部署 QA 环境,而这个发布管道只部署 QA 环境,对吗?如果是,我们可以配置阶段Pre-deployment conditions。步骤:打开预部署条件->启用Artifact过滤器,查看下图。

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

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2022-01-22
    • 2021-07-27
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多