如何在Azure DevOps中通过REST API获取发布管道的预部署门状态

问题描述 投票:0回答:1

我正在使用 Azure DevOps (ADO) REST API 在 Power BI 上构建仪表盘。我想通过使用 REST APIs 调用来查询组织中所有项目的发布管道是否具有 "SonarCloud 质量门状态 "的预部署门。

我已经尝试了这个API(发布-列表)。GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases?api-version=5.1. 我正在看 MS文档 并认为这特别 GateStatus会对我的需求有用,但这个 GateStatus 当我在配置了 "SonarCloud质量门状态 "的预部署门的管道上进行测试时,不会显示出来。

我发现这个API(Release - Get Release)。GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1MS文档. 那 preDeploymentGates 当我在POSTMAN中测试时,显示了我想要的信息。但是,问题是它需要 releaseId 在每个查询中,这对我来说是很麻烦的,因为我的最终目标是在多个组织的多个项目中拥有一个所有版本的列表。

谢谢。

azure-devops azure-devops-rest-api
1个回答
0
投票

因为我的最终目标是拥有多个组织的多个项目的所有发布列表。

由于您想获得 "SonarCloud "的管线预部署门状态,因此,您需要查询 "SonarCloud "的预部署门状态。全部 释放在 多项目多个组织,所以我们使用API (Release - Get Release) 来获取闸门状态,然后将此API在 所有发布管道一个 项目,下一步,循环 所有项目一个ORG最新,循环 所有ORGs.

第一,我们需要创建一个 所有无障碍组织 帕特:因为我们需要访问多个组织。

enter image description here

因为我们需要访问多个组织。

其次,设置一个数组来存储多个组织名称。

$ORGNames=@("Organization1","Organization2")

然后用下面的powershell脚本来循环API。(Release - Get Release):

$connectionToken="PAT"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$ORGNames=@("Organization1","Organization2")


ForEach ($ORGName in $ORGNames[0,1])

{

$ProjectUrl = "https://dev.azure.com/$($ORGName)/_apis/projects?api-version=5.1" 

Write-Host "URL: $ProjectUrl"

$Projects = (Invoke-RestMethod -Uri $ProjectUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})

$ProjectId = $projects.value.id


Write-Host "Projects = $ProjectId"



    ForEach ($Pt in $ProjectId)

    {

    $baseUrl = "https://vsrm.dev.azure.com/$($ORGName)/$($Pt)/_apis/release/releases?api-version=5.1"                   
    $ReleaseId = (Invoke-RestMethod -Uri $baseUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
    $ReleaseIds = $ReleaseId.value.id

    Write-Host "ReleaseID = $ReleaseId"



        foreach($ReleaseID in $ReleaseIds){

        $url = "https://vsrm.dev.azure.com/$($ORGName)/$($Pt)/_apis/release/releases/$($ReleaseID)?api-version=5.1"

        $GatesStatus = (Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})

        Write-Host "GatesStatus For ORGName $ORGName Project $Pt And Release ID $ReleaseID= $($GatesStatus.environments.deploySteps.preDeploymentGates.status | ConvertTo-Json -Depth 100)"

         }
      }

   }

检验结果。

enter image description here

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.