Public/Authoral/Get-AdoPipelineStatus.ps1
|
<# .SYNOPSIS Consulta o status de uma execução de pipeline no Azure DevOps até que ela seja concluída. .PARAMETER ExecutionUrl URL da execução do pipeline no Azure DevOps, contendo o buildId na rota de resultados. .OUTPUTS PSCustomObject com identificador da build, status, resultado, horário de entrada na fila, início e término. .NOTES Usa a variável de ambiente PAT para autenticação Basic na API de builds do Azure DevOps. #> function Get-AdoPipelineStatus { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$ExecutionUrl ) $run = $true; while ($run) { try { if ($ExecutionUrl -match "https:\/\/dev\.azure\.com\/([^\/]+)\/([^\/]+)\/_build\/results\?buildId=(\d+)") { $org = $matches[1] $project = $matches[2] $buildId = $matches[3] } else { throw "Invalid Azure DevOps pipeline URL format." } $apiUrl = "https://dev.azure.com/$org/$project/_apis/build/builds/$($buildId)?api-version=7.0" $encodedPAT = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($env:PAT)")) $headers = @{ "Authorization" = "Basic $encodedPAT" } $response = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get $payload = [PSCustomObject]@{ BuildId = $response.id Status = $response.status Result = $response.result QueueTime = $response.queueTime StartTime = $response.startTime FinishTime = $response.finishTime } if ($response.status -eq 'completed') { $run = $false return $payload } timer 30 } catch { Write-Error "Failed to retrieve pipeline status: $($_.Exception.Message)" $run = $false } } } |