How to: Deployment Groups and Release Definitions Mapping on Azure DevOps

Vinicius Moura
2 min readAug 4, 2021

--

This script and report extract all Deployment Groups and respective Release Definitions that usage them within the Azure DevOps organization

An original script is available on my GitHub repository. See below this script:

Let’s go understand each command used.

  1. PowerShell script will receive the following parameters:
  • $PAT = Personal Access token to connect on Azure DevOps;
  • $Organization = Organization URL to list all Deployment Groups and respective Release Definitions that usage them;
  • $Connstr = connection string to Azure SQL Database that stores the report information. To create this report, it’s necessary to create previously a Azure SQL Server and Database and run a script below:

2. Projects List = uses this REST API to list all Team Projects on Azure DevOps organization

$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($PAT)")) }$UriOrganization = "https://dev.azure.com/$($Organization)/" $uriProject = $UriOrganization + "_apis/projects?`$top=500"$ProjectsResult = Invoke-RestMethod -Uri $uriProject -Method get -Headers $AzureDevOpsAuthenicationHeaderForeach ($project in $ProjectsResult.value)
{
Write-Host $project.name
}

3. Definitions List = uses this REST API to list all Release Definitions on each Team Project

$uriReleaseDefinition = $UriOrgRelease + "$($teamproject.name)/_apis/release/definitions"    $ReleaseDefinitionsResult = Invoke-RestMethod -Uri $uriReleaseDefinition -Method Get -Headers $AzureDevOpsAuthenicationHeader     foreach  ($releasedefinition in $ReleaseDefinitionsResult.value)    {
Write-Host $releasedefinition.name
}

4. Deploymentgroups Get = uses this REST API to get Deployment Group on each Release Definition and Stage Name

$uriDeploymentGroup = $UriOrganization + "$($teamproject.name)/_apis/distributedtask/deploymentgroups/$($deployphases.deploymentInput.queueId)"  $DeploymentGroupResult = Invoke-RestMethod -Uri $uriDeploymentGroup -Method Get -Headers $AzureDevOpsAuthenicationHeaderWrite-Host $DeploymentGroupResult.name

5. After extract all Deployments Groups and Release Definitions, this information is stored in a table in Azure SQL.

6. After insert information into a table, I connected this database on Power BI:

  • Team Project (1) = Filter report using Team Project field;
  • Release Definitions Name (2) = Filter report using Release Definition Name field;
  • Deployment Group Name (3) = Filter report using Deployment Group Name field;
  • Information (4) = List all information about Projects, Release Definitions, and Stage Names (on rows), and respective Deployment Group Name (on columns). If the Release Definition uses the respective Deployment Group, the same will be marked (green ticks on a grid). If you mouse over on the respective cell, will be show information about Phase Name and Machine Name from Deployment Group.

--

--

Vinicius Moura
Vinicius Moura

Written by Vinicius Moura

Tech Solution Architect Manager na Accenture

Responses (1)