Bu yazı serisinde PowerShell ile birlikte Azure DevOps REST Api nasıl ve neden kullanılabilir olduğunu anlatacak ve makalenin ilerleyen kısımlarında önemli detaylara değinmeye çalışacağız. Makaleye başlamadan önce Azure DevOps API yapısını kavrayabilmek için REST Api sayfasına dikkatlice bakmanız gerektiğini belirtmekte fayda var. Aşağıdaki sayfa üzerinden REST Api’ya ait olan endpointlerin hepsine erişebilir ve gerekli GET, POST, PATCH gibi methodlar ile istekler atabilirsiniz.
Azure DevOps yapısına hakim iseniz, Organization adındaki bir kavramla daha önce karşılaşmanız pek olasıdır. PowerShell ile authenticate olmak istediğimizde karşımıza iki yöntem çıkmaktadır. Bunların başında, Azure DevOps organizasyonuna erişim sağlarken Azure Active Directory servisi kullanarak ya da Personal Access Token(PAT) oluşturarak erişim sağlayabilirsiniz. Ben bu yazı içerisinde tamamiyle Personal Access Token kullanarak ilerleme sağlayacağım.
Yukarıdaki resimde görüldüğü üzere “Personal access tokens” kısmına tıkladığınızda karşınıza gelecek ekrandan istediğiniz scope seçeneğine göre oluşturabilme şansınız bulunmaktadır. Ben şimdilik **Full Acccess** olarak token oluşturmasını gerçekleştireceğim.
PowerShell 3.0 ve sonrasını destekleyen herhangi bir cihaz üzerinde PowerShell’i açalım ve işlemlerimize başlayalım.
Ben yazı boyunca sizlere yaptığımız işlemi `VSCode` üzerinden göstermeye özen göstereceğim. Eğer sizde PowerShell’i VSCode üzerinden kullanmaya başlamadıysanız bir an önce başlamanızı tavsiye ederim, blog üzerinde gerekli adımlar mevcut. Temel olarak `Invoke-RestMethod` cmdlet kullanarak tüm istekleri gercekleştireceğiz.
PowerShell Tanımları
PowerShell içerisinde yapmamız gerekenler öncelikle birkaç değişken oluşturmaktan ibaret olacak. Asağıdaki satırları beraber yorumlayalım.
$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
Şimdi yukarıdaki satırları tek tek anlayalım. Görüldüğü üzere OrganizationName ve AzDoToken isimli değişkenler oluşturdum ve bunların karşılarına ilgili değerleri atamış bulunmaktayım. Daha sonra AuthenicationHeader adında bir degişken daha oluşturup içerisine Authorization tipini Basic olarak gönderip Personal Access Token değerini encoded hale getirmiş bulunmaktayım. Bundan sonra ise iki adet environment variable oluşturdum. Bunlar sırasıyla azDoAuthHeader bu environment değişkenine ise encoded edilmiş olan token değerini atadık ve son olarak ise azDoBaseUrl için ise REST istekleri yapacağım zaman yine bu environment değişkenini cağırarak gerekli işlemler icin aksiyon alacağım.
Authentication işlemini gerçekleştirmek için gereken tüm değişkenleri ve tanımlaları PowerShell üzerinde gercekleştirdik. Artık bir basit REST isteği atabiliriz. Aşağıdaki örnek ile hemen bir deneme gercekleştirelim. Yapmak istediğimiz şu şekilde bir deneme olsun.
AzDevOps organizasyonun içerisindeki tüm projeleri listeyelim.
$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 # base address $uri = "$azDoBaseUrl/_apis/projects?api-version=6.0" # Rest API params $restParams = @{ "URI" = $uri "Headers" = $azDoAuthHeader "Method" = "GET" "ErrorAction" = "Stop" } $getResponse = Invoke-RestMethod @restParams
Yukarıda gördügünüz gibi basit bir sorgulama yaparak AzDevOps organizasyonumun içerisindeki tüm Projeleri bir liste şeklinde elde ettim. Bu benim için aslında Azure DevOps REST Api istek atarken her şeyin düzgün gittiğine dair bir işaret. Bir sonraki yazımızda ise artık, daha farklı örnekler çoğaltarak biraz daha otomasyon tarafında neler yapabilirize dair soru işaretlerine yoğunlaşalım.