PowerShell ile Azure DevOps REST API Kullanımı – Bölüm 3
  1. Anasayfa
  2. Microsoft Azure

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ı  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

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

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.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir