Azure 使用RESTAPI在管道末尾作为post作业/任务获取当前/正在运行的构建最终阶段结果

Azure 使用RESTAPI在管道末尾作为post作业/任务获取当前/正在运行的构建最终阶段结果,azure,azure-devops,azure-pipelines,Azure,Azure Devops,Azure Pipelines,要求:需要在同一构建管道的末尾使用RESTAPI捕获当前或正在运行的构建管道结果 我有3个用于3个不同环境的构建管道,每个构建都有3个不同的阶段(阶段1、阶段2、阶段3) 我需要获取当前运行的构建的最终阶段(阶段3)结果(是否成功/失败) 我需要在最终阶段后获取结果信息,我想运行PS脚本作为下一个任务/作业或后期作业,以使用Rest API捕获最终阶段的结果,无论它是否通过/失败 我已经准备好PS脚本,我想知道可以用于此场景的确切API 挑战:我正处于半阶段,在同一构建管道的末尾,我面临着为特定

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

  • 我有3个用于3个不同环境的构建管道,每个构建都有3个不同的阶段(阶段1、阶段2、阶段3)
  • 我需要获取当前运行的构建的最终阶段(阶段3)结果(是否成功/失败)
  • 我需要在最终阶段后获取结果信息,我想运行PS脚本作为下一个任务/作业或后期作业,以使用Rest API捕获最终阶段的结果,无论它是否通过/失败
  • 我已经准备好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个构建的结果

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

    在测试结束时获取当前/正在运行的构建最终阶段结果 使用RESTAPI将管道作为作业/任务后处理

    要获得阶段结果,请使用以下未记录的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)"
    
    然后,您可以从其响应中获得阶段结果

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

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


    作为岗位/任务

    正如您所知,post job是一个用于清理环境的系统内置任务。如果要添加类似的任务并将其设置为post作业,则需要添加自定义扩展:

    我为自己开发了这个扩展,并将其上传到我的中,以便您可以参考我的回购协议(这只是一个简单的示例)

    在其定义中,您只需要将上述powershell脚本粘贴到文件中

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

    希望我的分机能帮助你

    在测试结束时获取当前/正在运行的构建最终阶段结果 使用RESTAPI将管道作为作业/任务后处理

    要获得阶段结果,请使用以下未记录的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)"
    
    然后,您可以从其响应中获得阶段结果

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

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


    作为岗位/任务

    正如您所知,post job是一个用于清理环境的系统内置任务。如果要添加类似的任务并将其设置为post作业,则需要添加自定义扩展:

    我为自己开发了这个扩展,并将其上传到我的中,以便您可以参考我的回购协议(这只是一个简单的示例)

    在其定义中,您只需要将上述powershell脚本粘贴到文件中

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


    希望我的分机能对您有所帮助。

    你好,梅林,谢谢您的评论。我收到的错误为“Build.buildid:术语'Build.buildid'未被识别为cmdlet、函数、脚本文件或可操作程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。”这会不会自动解析构建ID,或者我需要专门为它赋值?脚本如何获取当前构建的构建ID?@praveenkrish,不,build.BuildId是一个可以在构建运行期间自动获取的。您是否在VSTS管道中运行了上述api?如果在本地powershell命令行中运行它,则需要指定其值。因为,正如我所说,它是VSTS中的一个预定义变量,可以在构建运行期间自动获取。@praveenkrish,您会在ftp->dataproviders->data->ms.vss-build-web.run-details-data-provider->stages下看到阶段信息。好的,谢谢@MerlinLiang,我之前的评论被删除了。我现在确实看到了,但在不同的地方,但似乎我需要深入挖掘Json的很多内容。若我需要在to变量中捕获这个值,那个么它将是一个沉重的$response.ftp.DataProviders…阶段。因为我需要将此值发送到日志分析,以便在Dashbaord中进行投影。你对那部分有什么建议吗?@praveenkrish。没关系,我有你的麻烦。我知道使用$response.ftp.xxxxx获取指定值非常不方便和麻烦,但直到现在,还没有其他轻松的方法来获取该值。因为我们还没有开发和公开相应的api(或quick p