1. Ana Sayfa
  2. Microsoft Azure

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

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

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

CreateCreate a pipeline.
GetGets a pipeline, optionally at the specified version
ListGet 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ı http://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz. 

Referanslar

www.mshowto.org 

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

Bu İçeriğe Tepkin Ne Oldu?

Yazar Hakkında

Hasan Güral, Istanbul doğumlu ve uzun yıllardır bilişim sektöründe danışmanlıktan eğitmenliğe farkli pozisyonlarda görev almıştır. Üniversite eğitimiyle birlikte bilişim sektöründe Kibar Holding, Bilge Adam Bilgi Teknolojileri Akademisi ve PeakUp Bilgi Teknolojileri gibi farkli kurumlarda Kıdemli Danışman ve Eğitmen olarak sektöre yön veren projelerde yer almistir.Microsoft Azure alanında yapmış olduğu paylaşımlar ve katkılarından dolayı Microsoft Valuable Professional (Azure) unvanına hak kazanmıştır. Cloud teknolojilerinin otomasyon alaninda gelişmesiyle birlikte zamaninin bir çoğunu PowerShell, Event-Driven Orchestration, Infrastructure as a Code ve Configuration as a Code ile geçirmektedir.Kariyerine Ingiltere’de DevOps Engineer ve Automation Enthusiast rolü ile Cloud Rundle’da devam etmektedir.

Yorum Yap