az pipelines 发布列表不显示发布结果

问题描述 投票:0回答:1

运行以下命令后,期望看到发布结果,如成功或失败,就像我们在 az pipelines 构建列表的输出中看到的那样

az pipelines release list --top 5000

如何使用上述命令获取发布的状态和结果?

azure-devops-rest-api azure-devops-extensions
1个回答
0
投票

az pipelines build list
不同,命令
az pipelines release list
不会返回释放结果。

与命令

az pipelines release show --id
相同,它包含释放的详细信息,但它也不直接显示释放的结果。

请在类似票证上查看我的答案。对于发布

status
,根据文档,它只有以下 4 个状态,它无法显示发布是否完成。例如,如果发布管道成功完成,或者一个阶段等待批准,则它仍然是active状态。

对于发布

result
,没有直接的值来指示它是失败还是成功。相反,我们可以在发布的每个环境中检查
task result
,如果有
failed
状态,我们可以将发布视为失败。

因此,步骤如下:

  1. 通过rest api获取目标发布管道的所有发布ID发布-列表

  2. 对于每个版本,通过rest api 获取版本详细信息Releases - Get Release

  3. 解析环境状态和各个任务结果,确定发布运行状态和结果。

以下是 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======"
}

我这边的脚本结果供大家参考:

如果想要直接用数值来表示发布结果,建议在社区链接提出用户语音票,谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.