运行以下命令后,期望看到发布结果,如成功或失败,就像我们在 az pipelines 构建列表的输出中看到的那样
az pipelines release list --top 5000
如何使用上述命令获取发布的状态和结果?
与
az pipelines build list
不同,命令az pipelines release list
不会返回释放结果。
与命令
az pipelines release show --id
相同,它包含释放的详细信息,但它也不直接显示释放的结果。
请在类似票证上查看我的答案。对于发布
status
,根据文档,它只有以下 4 个状态,它无法显示发布是否完成。例如,如果发布管道成功完成,或者一个阶段等待批准,则它仍然是active状态。
对于发布
result
,没有直接的值来指示它是失败还是成功。相反,我们可以在发布的每个环境中检查task result
,如果有failed
状态,我们可以将发布视为失败。
因此,步骤如下:
通过rest api获取目标发布管道的所有发布ID发布-列表
对于每个版本,通过rest api 获取版本详细信息Releases - Get Release。
解析环境状态和各个任务结果,确定发布运行状态和结果。
以下是 PowerShell 脚本示例:
# Define the parameters
$organization = "orgname"
$project = "projectname"
$definitionId = "1" # change to your release definition id
$personalAccessToken = "PAT"
# Create the authorization header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$personalAccessToken)))
$headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
# Define the API endpoint for the release definition
$url = "https://vsrm.dev.azure.com/$organization/$project/_apis/release/releases?definitionId=$definitionId" + "&api-version=7.1-preview.8"
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get
#check for each release
foreach ($release in $response.value) {
Write-Host "Release ID: $($release.id)"
# Invoke the REST API to get the release details
$url2 = "https://vsrm.dev.azure.com/$organization/$project/_apis/release/releases/$($release.id)" + "?api-version=7.1"
$response = Invoke-RestMethod -Uri $url2 -Method Get -Headers $headers -ContentType "application/json"
# output release status:
Write-Host "Release: $($response.name)"
Write-Host "Release status: $($response.status)"
foreach ($environment in $response.environments) {
# Get the environment name and status
$environmentName = $environment.name
$environmentStatus = $environment.status
# Write-Host "Environment $environmentName has status $environmentStatus"
if ($environmentStatus -eq "inProgress" -or $environmentStatus -eq "notDeployed" -or $environmentStatus -eq "pending")
{
Write-Host "Release is still running"
break
}
# Loop through the tasks in the environment
foreach ($task in $environment.deploySteps.releaseDeployPhases.deploymentJobs.tasks)
{
# Get the task name and status
$taskName = $task.name
$taskStatus = $task.status
# Write the task name and status to the console
Write-Host "Task $taskName has status $taskStatus"
if ($taskStatus -eq "failed")
{
Write-Host "Release is failed at stage $environmentName task $taskName" # echo release is failed at which stage and which task.
}
}
}
Write-Host "======Next release======"
}
我这边的脚本结果供大家参考:
如果想要直接用数值来表示发布结果,建议在社区链接提出用户语音票,谢谢。