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
TAGs:PowerShell ile Azure DevOps REST API, DevOps, Azure DevOps, Rest API