gpt4 book ai didi

azure - 使用 REST API 在管道末尾获取当前/正在运行的构建最终阶段结果作为后期作业/任务

转载 作者:行者123 更新时间:2023-12-02 07:46:00 24 4
gpt4 key购买 nike

要求:需要在同一构建管道末尾使用 REST API 捕获当前或正在运行的构建管道结果。

  1. 我有 3 个构建管道,适用于 3 个不同的环境,每个构建都有 3 个不同的阶段(Stage1、Stage2、Stage3)。
  2. 我需要获取当前正在运行的构建的最后阶段(Stage3)结果(无论是成功/失败)。
  3. 我需要在最后阶段获取结果信息,我想将 PS 脚本作为下一个任务/作业或发布作业运行以捕获最后阶段的结果,无论它是否通过/失败 <强>使用Rest API。
  4. 我已准备好 PS 脚本,我想知道可用于此场景的确切 API。

挑战:我处于半阶段,在同一构建管道末尾获取特定运行构建的最后阶段结果时遇到挑战。

示例代码片段:

$personalAccessToken=(Get-AzureKeyVaultSecret -VaultName $keyVaultName -Name $secretname).SecretValueText
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalAccessToken)"))
$header = @{Authorization=("Basic {0}" -f $token)}
$projectsUrl = "https://dev.azure.com/$AzureDevopsAccount/$Project/_apis/build/builds?api-version=5.0&resultFilter=all&definitions=$definition"
$projects = Invoke-RestMethod -Uri $projectsUrl -Method Get -Headers $header
Write-Host "Pipeline = $($projects.value.result| ConvertTo-Json -Depth 1)"

使用此代码,我能够捕获所有管道的结果。我只需要知道如何在管道完成结束时获取正在运行的构建的状态。

注意:由于我有 3 个不同的构建管道,因此我需要能够在每个构建管道末尾单独捕获所有 3 个构建的结果。

如有任何建议,我们将不胜感激。谢谢。

最佳答案

Get the Current/Running Build final stage results at the end of the pipeline as post job/task using REST API

要获取阶段结果,请使用以下未记录的 api,您可以通过 F12 获取它:

 Get https://dev.azure.com/{org}/{project}/_build/results?buildId=$(Build.BuildId)&__rt=fps&__ver=2

Powershell 脚本:

$token = "{token}"

$url =" https://dev.azure.com/{org}/{project}/_build/results?buildId=$(Build.buildid)&__rt=fps&__ver=2"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get

Write-Host "results = $($response | ConvertTo-Json -Depth 100)"

然后你可以从它的响应中得到阶段结果。

enter image description here

在我们的系统中,我们使用数字来表示结果:0:成功,1:成功但有问题,2:失败,3:取消,4:跳过,5:放弃

注意:如您所愿,您只想获得最终阶段的结果,而不是当前管道的所有阶段。我需要说的是,到目前为止,还没有直接的方法可以实现这一目标。您必须指定阶段名称来过滤最终阶段的结果代码。这里有一个关于如何 filter 的示例。

<小时/>

as post job/task

如您所知,后期作业是一个系统内置任务,用于清理环境。如果您想添加类似的任务并设置为发布作业,则需要添加自定义扩展名: Use a decorator to inject steps into a pipeline

我自己开发了这个扩展,并将其上传到我的 github 中,以便您可以引用我的存储库(这只是一个简单的示例)。

在其定义中,您只需将上述powershell脚本粘贴到my-decorator.yml文件中即可。

此时,用于提示最终阶段结果的powershell脚本可以设置为管道中的后期作业。

希望我的扩展可以帮助您。

关于azure - 使用 REST API 在管道末尾获取当前/正在运行的构建最终阶段结果作为后期作业/任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com