如何使用 API 调用获取已执行的管道详细信息(原始日志/输出)

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

我想使用纯文本或文本文件中的 API 调用来获取特定构建 ID 的成功管道中生成的日志,而不使用任何工件。

有人可以帮我解决这个问题吗? 我们有哪些方法和先决条件?

提前致谢

我尝试使用 powershell 运行 API 调用,它提供了管道日志,例如执行时间和创建时间、LogID 所有这些,但不是生成的输出。

获取https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs/{runId}/logs?api-version=6.0-preview.1

我使用过这个API调用

azure api azure-devops azure-pipelines
1个回答
0
投票

根据您的要求,您需要获取纯文本或文本文件的 Pipeline 日志。

为了满足您的需求,您需要先获取日志url,然后您可以根据日志url获取Pipeline日志详细信息。

这里有两个Rest API可以满足您的要求:

日志 - 列表 要使用此 Rest API,您需要在 URL 中添加参数:

$expand=signedContent
以获取有效的签名内容 url。我们可以根据signedContent url获取管道步骤详细日志。

Rest API URL:

GET https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs/{runId}/logs?$expand=signedContent&api-version=6.0-preview.1

PowerShell 示例:

$token = "{PAT}"

$url="https://dev.azure.com/{orgname}/{projectname}/_apis/pipelines/{PipelinedefinitionID}/runs/{PipelineRunID}/logs?`$expand=signedContent&api-version=6.0-preview.1"

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

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

Write-Host "$response"

foreach($log in $response.logs)
{
   $logurl =  $log.signedContent.url


   $response1 = Invoke-RestMethod -Uri $logurl -Headers @{Authorization = "Basic $token"} -Method Get  -ContentType application/json
   echo response1 
   echo $response1 | Out-File -FilePath {yourpath\test1.txt} -Append


  

}

TimeLine - Get 此 REST API 可以直接获取响应中的日志 url。然后我们就可以根据日志url直接获取管道详细日志了。

其余API URL

GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/timeline?api-version=6.0

PowerShell 示例:

$token = "PAT"

$url="https://dev.azure.com/{Orgname}/{ProjectName}/_apis/build/builds/{BuildID}/timeline?api-version=6.0"

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

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

Write-Host "$response"

foreach($step in $response.records)
{
   $stepname =  $step.name
   $steplogurl =$step.log.url
   echo $stepname
   if($steplogurl -ne $null )
   {
     $response1 = Invoke-RestMethod -Uri $steplogurl -Headers @{Authorization = "Basic $token"} -Method Get  -ContentType application/json
     echo $response1
     echo $response1 | Out-File -FilePath {yourpath\test1.txt} -Append

   }



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