1. Ana Sayfa
  2. DevOps

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


0

Bir önceki yazımızda genel hatlarıyla Azure DevOps Rest API‘na erişmek için ön hazırlıklar yaptık. Bununla beraber çok basit bir request gerçekleştirerek ilgili DevOps organizasyonu içerisinden projeleri listeledik. Şimdi ise örneklerimizi biraz daha geniş düzlemde ele alalım.

Örneğimizi şu şekilde ele alalım. Azure DevOps Projesi içinde yer alan tüm Repository listesini alalım ve bunun için AzDo arayüzünden listeye şöyle bir göz atalım.

Resim-1

Serinin ilk bölümünde kullandığımız PowerShell scriptini kullanmaya devam edeceğiz. Azure DevOps API Reference sayfasına baktığımızda Repository için aşağıdaki endpointlerle karşılaşmaktayız.

Hiç vakit kaybetmeden örneğimize odaklanalım ve ilk sorgulamamızı API üzerinde gerçekleştirelim.

$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

$reposURI = "$azDoBaseUrl/$($ProjectName)/_apis/git/repositories?api-version=6.0"

# Rest API params
$restParams = @{

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

}

$getResponse = Invoke-RestMethod @restParams 

$getResponse.value | Select-Object id, name, defaultBranch

Resim-2

Resim içerisinde görüldüğü üzere mavi bölge içerisinde gördüğümüz Repository enpointi girerek REST API isteğini PowerShell ile gerçekleştirmiş bulunuyoruz. Bu sorgulamadan sonra ise ilgili Azure DevOps Projesi içerisinde bulunan tüm Repository listesini elde ediyoruz. Ayrıca property kısmını RepositoryId, Name ve defaultBranch değişkenleriyle yapılandırarak istenilen detaylı bilgileri ekrana yazdırdık.

$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

$reposURI = "$azDoBaseUrl/$($ProjectName)/_apis/git/repositories?api-version=6.0"

# Rest API params
$restParams = @{

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

}

$getRepos = Invoke-RestMethod @restParams 

ForEach ($repo in $getRepos.value) {

    $RepoId   = $repo.id
    $RepoName = $repo.name
    
    $branchRequestUri = "$azDoBaseUrl/$($ProjectName)/_apis/git/repositories/$($repoId)/refs?api-version=6.0"
    
    $getOutput = Invoke-RestMethod -Uri $branchRequestUri -Method Get -Headers $azDoAuthHeader

    $getOutput.value | ForEach-Object {

        Write-Output '````````````````````````````````````````````````````````````'
        Write-Output "[INFO] RepositoryId:   $($repoId)"
        Write-Output "[INFO] RepositoryName: $($RepoName)"
        Write-Output "[INFO] BranchName:     $($_.Name)"
        Write-Output '````````````````````````````````````````````````````````````'

    }
}

Yukarıdaki PowerShell script bloğunda göze çarpan en önemli şey ForEach bloklar içerisinde yaptığımız işlemlerdir. İlk başta Repository endpointini erişiyoruz ve daha sonrasında elde ettiğimizz tüm repository isimlerini `refs` endpoint’ine göndererek branch isimlerinin dönmesini sağlıyoruz.

Resim-3
Sonuç olarak aşağıdaki PowerShell konsolundaki gibi bir output elde etmemiz gerekiyor. Bu örnekleri daha farklı bir şekilde geliştirebiliriz. Örneğin, eğer bir branch 90 gündür herhangi bir commit işlemine tabii tutulmamışsa listeden silinmesi için gerekli aksiyonları alabiliriz.

Resim-4

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: azure devops, powershell, REST API, 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