Created
January 30, 2019 15:10
-
-
Save tegaaa/65889c722fdc7671bc957c1803b7f5ca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function GetUrl() { | |
param( | |
[string]$orgUrl, | |
[hashtable]$header, | |
[string]$AreaId | |
) | |
# Build the URL for calling the org-level Resource Areas REST API for the RM APIs | |
$orgResourceAreasUrl = [string]::Format("{0}/_apis/resourceAreas/{1}?api-preview=5.0-preview.1", $orgUrl, $AreaId) | |
# Do a GET on this URL (this returns an object with a "locationUrl" field) | |
$results = Invoke-RestMethod -Uri $orgResourceAreasUrl -Headers $header | |
# The "locationUrl" field reflects the correct base URL for RM REST API calls | |
if ("null" -eq $results) { | |
$areaUrl = $orgUrl | |
} | |
else { | |
$areaUrl = $results.locationUrl | |
} | |
return $areaUrl | |
} | |
$orgUrl = "https://dev.azure.com/AzureDevOpsDemos2018" | |
$personalToken = "kipdwfz4nkr4fi4e56qeziv56jx6v4fc4tetjyq7ymo5geuult3q" | |
Write-Host "Initialize authentication context" -ForegroundColor Yellow | |
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalToken)")) | |
$header = @{authorization = "Basic $token"} | |
# DEMO 1 Liste des projects | |
Write-Host "Demo 1" | |
$coreAreaId = "79134c72-4a58-4b42-976c-04e7115f32bf" | |
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $coreAreaId | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/core/projects/list?view=azure-devops-rest-5.0 | |
$projectsUrl = "$($tfsBaseUrl)_apis/projects?api-version=5.0-preview.3" | |
$projects = Invoke-RestMethod -Uri $projectsUrl -Method Get -ContentType "application/json" -Headers $header | |
$projects.value | ForEach-Object { | |
Write-Host $_.name | |
} | |
# DEMO 2 Liste des definitions de release pipeline | |
Write-Host "Demo 2" | |
$projects.value | ForEach-Object { | |
$project = $_.name | |
$releaseManagementAreaId = "efc2f575-36ef-48e9-b672-0c6fb4a48ac5" | |
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $releaseManagementAreaId | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-5.0 | |
$relDefUrl = "$tfsBaseUrl/$project/_apis/release/definitions?api-version=5.0-preview.3" | |
$result = Invoke-RestMethod $relDefUrl -Method Get -ContentType "application/json" -Headers $header | |
$relDefs = $result.value | |
if($relDefs.count -gt 0){ | |
Write-Host "$project $($relDefs.count) release def founds" -ForegroundColor Blue | |
$relDefs | ForEach-Object { | |
Write-host "`t$($_.name)" -ForegroundColor Green | |
} | |
} | |
} | |
# DEMO 3 Liste des releases d'une definition de release pipeline | |
Write-Host "Demo 3" | |
$projects.value | ForEach-Object { | |
$project = $_.name | |
$releaseManagementAreaId = "efc2f575-36ef-48e9-b672-0c6fb4a48ac5" | |
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $releaseManagementAreaId | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-5.0 | |
$relDefUrl = "$tfsBaseUrl/$project/_apis/release/definitions?api-version=5.0-preview.3" | |
$result = Invoke-RestMethod $relDefUrl -Method Get -ContentType "application/json" -Headers $header | |
$relDefs = $result.value | |
if($relDefs.count -gt 0){ | |
Write-Host "$project $($relDefs.count) release def founds" -ForegroundColor Blue | |
$relDefs | ForEach-Object { | |
$relDefId = $_.id | |
Write-host "`t$($_.name)" -ForegroundColor Green | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/get%20release%20definition%20summary?view=azure-devops-rest-5.0 | |
$relsUrl = "$tfsBaseUrl/$project/_apis/release/releases?definitionId=$relDefId&releaseCount=5&api-version=5.0-preview.8" | |
$result = Invoke-RestMethod $relsUrl -Method Get -ContentType "application/json" -Headers $header | |
$rels = $result.releases | |
if($rels.count -gt 0){ | |
Write-Host "`t`t$($rels.count) releases found" -ForegroundColor Blue | |
$rels | ForEach-Object { | |
$rel = $_ | |
Write-Host "`t`t`t$($rel.name)" | |
} | |
} | |
} | |
} | |
} | |
# DEMO 4 Liste des releases d'une definition de release pipeline | |
Write-Host "Demo 4" | |
$projects.value | ForEach-Object { | |
$project = $_.name | |
$releaseManagementAreaId = "efc2f575-36ef-48e9-b672-0c6fb4a48ac5" | |
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $releaseManagementAreaId | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-5.0 | |
$relDefUrl = "$tfsBaseUrl/$project/_apis/release/definitions?api-version=5.0-preview.3" | |
$result = Invoke-RestMethod $relDefUrl -Method Get -ContentType "application/json" -Headers $header | |
$relDefs = $result.value | |
if($relDefs.count -gt 0){ | |
Write-Host "$project $($relDefs.count) release def founds" -ForegroundColor Blue | |
$relDefs | ForEach-Object { | |
$relDefId = $_.id | |
Write-host "`t$($_.name)" -ForegroundColor Green | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/get%20release%20definition%20summary?view=azure-devops-rest-5.0 | |
$relsUrl = "$tfsBaseUrl/$project/_apis/release/releases?definitionId=$relDefId&releaseCount=5&api-version=5.0-preview.8" | |
$result = Invoke-RestMethod $relsUrl -Method Get -ContentType "application/json" -Headers $header | |
$rels = $result.releases | |
if($rels.count -gt 0){ | |
Write-Host "`t`t$($rels.count) releases found" -ForegroundColor Blue | |
$rels | ForEach-Object { | |
$rel = $_ | |
$rel.Environments | ForEach-Object { | |
$envName = $_.name | |
#Write-Host " $envName" -ForegroundColor Green | |
$env = $_ | |
$env.preDeployApprovals | ForEach-Object { | |
$approval = $_ | |
if (-not $approval.isAutomated -and $approval.status -eq "approved") { | |
Write-host "`t`t`tRelease $($rel.name) ($envName) was approved By $($approval.approvedBy.displayName) on $($approval.modifiedOn)" -ForegroundColor Green | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
# DEMO 5 Modification d'une variable dans une definition pour un environnement | |
Write-Host "Demo 5" | |
$projects.value | ForEach-Object { | |
$project = $_.name | |
$releaseManagementAreaId = "efc2f575-36ef-48e9-b672-0c6fb4a48ac5" | |
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $releaseManagementAreaId | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-5.0 | |
$relDefUrl = "$tfsBaseUrl/$project/_apis/release/definitions?api-version=5.0-preview.3" | |
$result = Invoke-RestMethod $relDefUrl -Method Get -ContentType "application/json" -Headers $header | |
$relDefs = $result.value | |
if($relDefs.count -gt 0){ | |
Write-Host "$project $($relDefs.count) release def founds" -ForegroundColor Blue | |
$relDefs | ForEach-Object { | |
$relDef = $_ | |
$relDefExpanded = Invoke-RestMethod "$($relDef.url)?%24Expand=Environments&api-version=5.0-preview.3" -Method Get -ContentType "application/json" -Headers $header | |
$relDefExpanded.environments | ForEach-Object { | |
$env = $_ | |
if ($null -ne $env.variables.allo) { | |
Write-host "Variable value before: $($env.variables.DEMO.value)" -ForegroundColor Green | |
$env.variables.allo.value = "New Value" | |
} | |
$body = $relDefExpanded | ConvertTo-Json -Depth 100 -Compress | |
$body = [System.Text.Encoding]::UTF8.GetBytes($body) | |
$updateResult = Invoke-RestMethod "$($relDef.url)?api-version=5.0-preview.3" -Method Put -Headers $header -ContentType "application/json" -body $body | |
Write-host "Variable value after: $($updateResult.environments.variables.DEMO.value)" -ForegroundColor Green | |
} | |
} | |
} | |
} | |
# DEMO 6 Changing work item title | |
Write-Host "Demo 6" | |
$workAreaId = "1d4f49f9-02b9-4e26-b826-2cdb6195f2a9" | |
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $workAreaId | |
$workItemId = 1 | |
# https://docs.microsoft.com/en-us/rest/api/azure/devops/core/projects/list?view=azure-devops-rest-5.0 | |
$wisUrl = "$($tfsBaseUrl)_apis/wit/workitems/$($workItemId)?api-version=5.0-preview.3" | |
$workitem = Invoke-RestMethod -Uri $wisUrl -Method Get -ContentType "application/json" -Headers $header | |
Write-Host "Before: $($workitem.fields.'System.Title')" | |
$body = @" | |
[ | |
{ | |
"op": "add", | |
"path": "/fields/System.Title", | |
"value": "$($workitem.fields.'System.Title')+DEMO" | |
}, | |
{ | |
"op": "add", | |
"path": "/fields/System.History", | |
"value": "Changing Title" | |
} | |
] | |
"@ | |
$workitem = Invoke-RestMethod -Uri $wisUrl -Method Patch -ContentType "application/json-patch+json" -Headers $header -Body $body | |
Write-Host "After: $($workitem.fields.'System.Title')" |
I'm quite late... but thanks !!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you very much for this. Very helpful.
Typo?
$orgResourceAreasUrl = [string]::Format("{0}/_apis/resourceAreas/{1}?api-**preview**=5.0-preview.1", $orgUrl, $AreaId)
should it be
$orgResourceAreasUrl = [string]::Format("{0}/_apis/resourceAreas/{1}?api-**version**=5.0-preview.1", $orgUrl, $AreaId)
?