PowerShell ile Azure DevOps REST API Kullanımı – Bölüm 3

azuredevops

Serimizin son bölümünde Azure DevOps API kullanarak `Pipelines` endpointine erişmeye çalışacağız. Bununla beraber gerekli istekleri gerçekleştirerek projelerin içerisinde bulunan tüm pipelines tanımlamalarını listeleyelim.

Öncelikle hangi tip endpointlerimiz var onun listesine bir göz atalım.

Azure Pipelines için operasyon tipleri

Create Create a pipeline.
Get Gets a pipeline, optionally at the specified version
List Get a list of pipelines.

Hemen örnek tarafına geçelim ve ilk sorgulamamızı API üzerinde gerçekleştirelim. Yapmak istediğimiz aslında oldukça kolay, yalnızca belirli bir Azure DevOps projesinde bulunan tüm Pipeline listesini elde etmeyi hedefliyoruz. Bunun için de kullanacağımız API endpoint `List` olacak.

$OrganizationName = "hasangural" # Azure DevOps OrganizationName
$ProjectName      = "GBC-TerraformDemo"
$AzDoToken        = "PAT-TOKEN-HERE" # Azure DevOps Personal Access Token (PAT)

# Authentcation Header for AzDo REST Endpoint.
$AuthenicationHeader = @{Authorization = 'Basic ' + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$AzDoToken")) }

# Generating environment variables

Set-Variable -Name "azDoAuthHeader" -Value $AuthenicationHeader -Scope Global -ErrorAction Stop
Set-Variable -Name "azDoBaseUrl" -Value "https://dev.azure.com/$OrganizationName" -Scope Global -ErrorAction Stop

$uri = "$azDoBaseUrl/$($ProjectName)/_apis/pipelines?api-version[yourVersion]"

# Rest API params
$restParams = @{

    "URI"         = $uri
    "Headers"     = $azDoAuthHeader
    "Method"      = "GET"
    "ErrorAction" = "Stop"

}

$getPipelines = Invoke-RestMethod @restParams 

$getPipelines.value | ForEach-Object { 

    Write-Output '````````````````````````````````````````````````````````````'
    Write-Output "[INFO] Pipeline Name:   $($_.Name)"
    Write-Output "[INFO] Pipeline URL:    $($_.url)"
    Write-Output '````````````````````````````````````````````````````````````'
    
}

Yukarıdaki PowerShell içerisinde bulunan satırları okuduğumuzda gözümüze iki adet önemli kriter çarpıyor.

Bunlar sırasıyla;

  • OrganizationName
  • ProjectName

Bu iki değişken sayesinde istediğimiz organizasyonun içerisinde bulunan projede bu sorgulamayı gerçekleştirebiliyoruz. Sonucumuz aşağıdaki gibi olmaktadır.

Senaryomuzu biraz daha genişletmek adına tüm pipeline listesini almaya çalışalım. Yapmak istediğimiz, hedeflediğimiz organizasyon içerisinde bulunan bütün pipeline listesini elde etmek. Tabii ki bu hedefi gerçekleştirebilmek için pipeline sorgulaması yapacağımız bütün projelerde en azından “reader” iznine sahip olmamız gerekiyor.

PowerShell içerisinde yapmamız gereken adımlar sırasıyla:

  • Projects API endpoint üzerinden tüm projelerin listesine ulaşmak
  • Daha sonra tüm projeleri gezerek bütün pipeline tanımlamalarına ulaşmak
$OrganizationName = "hasangural" # Azure DevOps OrganizationName
$AzDoToken        = "PAT-TOKEN-HERE" # Azure DevOps Personal Access Token (PAT)

# Authentcation Header for AzDo REST Endpoint.
$AuthenicationHeader = @{Authorization = 'Basic ' + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$AzDoToken")) }

# Generating environment variables

Set-Variable -Name "azDoAuthHeader" -Value $AuthenicationHeader -Scope Global -ErrorAction Stop
Set-Variable -Name "azDoBaseUrl" -Value "https://dev.azure.com/$OrganizationName" -Scope Global -ErrorAction Stop

$uri = "$azDoBaseUrl/_apis/projects?api-version=6.1-preview.1"

# Rest API params
$restParams = @{

    "URI"         = $uri
    "Headers"     = $azDoAuthHeader
    "Method"      = "GET"
    "ErrorAction" = "Stop"

}

$getProjects = Invoke-RestMethod @restParams 

$getProjectNames = $getProjects.value.name

ForEach ($project in $getProjectNames) {

    $ProjectId   = $project.id
    
    $getPipelines = "$azDoBaseUrl/$($project)/_apis/pipelines?api-version=6.1-preview.1"
    
    $getOutputPipelines = Invoke-RestMethod -Uri $getPipelines -Method Get -Headers $azDoAuthHeader

    $getOutputPipelines.value | ForEach-Object {

        Write-Output '````````````````````````````````````````````````````````````'
        Write-Output "[INFO] ProjectName:    $($project)"
        Write-Output "[INFO] PipelineName:   $($_.Name)"
        Write-Output "[INFO] PipelineId:     $($_.Id)"
        Write-Output '````````````````````````````````````````````````````````````'

    }
}

Yukarıda bulunan PowerShell satırları içerisindeki en önemli olan kısım, ilk önce tüm projelerin listesini getirmek için `Projects` endpoint üzerinden organizasyonun içindeki bütün projelerin listelenmesini sağlamak. Daha sonra yapmamız gereken ise tüm proje koleksiyonunu alıp `Pipelines` endpointini kullanarak her Azure DevOps projesi için tek tek sorgulama yapmak ve nihayetinde bir sonuca ulaşmak. Eğer bu tasarladığımız yapıda bir sorun yok ise aşağıdaki gibi bir çıktı görmemiz mümkün.

Resim-1

Görüldüğü üzere PowerShell ile birçok REST API isteğini gerçekleştirebildik. Bu örnekle birlikte otomasyon tarafında daha farklı noktalara ışık tutmaya çalıştık. Eğer siz de PowerShell ve Azure DevOps REST API’nın birlikte kullanımıyla ilgiliyseniz, serinin devamı için farklı örnekler verebilirsiniz.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz. 

Referanslar

www.mshowto.org 

TAGs:PowerShell ile Azure DevOps REST API, DevOps, Azure DevOps, Rest API

Yazı gezinmesi

Mobil sürümden çık