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

时间:2020-06-04 05:38:09

标签: azure-devops azure-devops-rest-api

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

我已经尝试过此API(发布-列表)GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases?api-version=5.1。我正在阅读MS docs,并认为此特定的GateStatus对我的需求将是有用的,但是当我在具有预部署门的管道上进行测试时,此GateStatus不会显示已配置“ SonarCloud Quality Gate状态”。

我用MS docs找到了这个API(发布-获取发行版)GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1preDeploymentGates显示了我在POSTMAN中进行测试时想要的信息。但是,问题在于,每个查询都需要releaseId,这对我来说很麻烦,因为我的最终目标是要有多个组织的多个项目中的所有版本的列表。

谢谢。

1 个答案:

答案 0 :(得分:0)

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

由于您希望获得多个组织多个项目中的 ALL 版本的管道预部署门状态,因此我们使用API (Release - Get Release)来获取Gates状态,然后将此API循环到一个项目的所有发布管道中,然后循环所有项目一个ORG (最新),循环所有ORG

首先,我们需要创建一个所有可访问的组织 PAT:

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

希望这会有所帮助。