73 lines
3.3 KiB
PowerShell
73 lines
3.3 KiB
PowerShell
$auth = Get-Content "$env:USERPROFILE\.ssh\azure_devops_auth.json" | ConvertFrom-Json
|
|
$pat = $auth.pat
|
|
$base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))
|
|
$headers = @{ Authorization = "Basic $base64Auth" }
|
|
|
|
# Get failed build for mfe-user
|
|
$response = Invoke-RestMethod -Uri "https://dev.azure.com/CN-Squad/Invista%20FIDC%20-%20Nexus/_apis/build/builds?api-version=7.0&`$top=20" -Headers $headers
|
|
|
|
$failedBuild = $response.value | Where-Object { $_.repository.name -eq 'mfe-user' -and $_.result -eq 'failed' } | Select-Object -First 1
|
|
|
|
if ($failedBuild) {
|
|
Write-Host "=== Failed Build: $($failedBuild.buildNumber) ==="
|
|
Write-Host "Build ID: $($failedBuild.id)"
|
|
Write-Host "URL: $($failedBuild._links.web.href)"
|
|
Write-Host "Branch: $($failedBuild.sourceBranch)"
|
|
Write-Host ""
|
|
|
|
# Get timeline to find failed step
|
|
$timelineUrl = "https://dev.azure.com/CN-Squad/Invista%20FIDC%20-%20Nexus/_apis/build/builds/$($failedBuild.id)/timeline?api-version=7.0"
|
|
$timeline = Invoke-RestMethod -Uri $timelineUrl -Headers $headers
|
|
|
|
Write-Host "=== Timeline ==="
|
|
foreach ($record in $timeline.records) {
|
|
if ($record.result -eq 'failed') {
|
|
Write-Host "`n*** FAILED: $($record.name) ***"
|
|
Write-Host "Type: $($record.type)"
|
|
Write-Host "State: $($record.state)"
|
|
Write-Host "Result: $($record.result)"
|
|
|
|
if ($record.errorCount -gt 0) {
|
|
Write-Host "Error Count: $($record.errorCount)"
|
|
}
|
|
|
|
# Get log for this record
|
|
if ($record.log -and $record.log.url) {
|
|
Write-Host "`n--- Error Log ---"
|
|
try {
|
|
$logContent = Invoke-RestMethod -Uri $record.log.url -Headers $headers
|
|
$lines = $logContent -split "`n"
|
|
# Show lines with error or the last 30 lines
|
|
$errorLines = $lines | Select-String -Pattern "error|Error|ERROR|failed|Failed|FAILED|exception" -Context 2,2
|
|
if ($errorLines) {
|
|
$errorLines | ForEach-Object { Write-Host $_.Line }
|
|
} else {
|
|
$startLine = [Math]::Max(0, $lines.Count - 30)
|
|
for ($i = $startLine; $i -lt $lines.Count; $i++) {
|
|
Write-Host $lines[$i]
|
|
}
|
|
}
|
|
} catch {
|
|
Write-Host "Could not fetch log: $_"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($msUserBuilds.Count -gt 0) {
|
|
$failedBuild = $msUserBuilds | Where-Object { $_.result -eq 'failed' } | Select-Object -First 1
|
|
if ($failedBuild) {
|
|
Write-Host "`n--- Failed Build Details ---"
|
|
Write-Host "Build ID: $($failedBuild.id)"
|
|
Write-Host "URL: $($failedBuild._links.web.href)"
|
|
|
|
# Get timeline for error details
|
|
$timeline = Invoke-RestMethod -Uri "https://dev.azure.com/CN-Squad/$($failedBuild.url)/timeline?api-version=7.0" -Headers $headers
|
|
$failedTasks = $timeline.records | Where-Object { $_.result -eq 'failed' }
|
|
foreach ($task in $failedTasks) {
|
|
Write-Host "`nFailed Task: $($task.name)"
|
|
Write-Host "Type: $($task.type)"
|
|
}
|
|
}
|
|
}
|