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

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

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

我怎样才能实现它?我们有哪些方法和先决条件?

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

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

我使用过的这个API调用:

azure-devops azure-pipelines azure-devops-rest-api
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

回复样本:

  "logs": [
    {
      "createdOn": "2024-09-27T06:29:39.307Z",
      "id": 1,
      "lastChangedOn": "2024-09-27T06:29:39.45Z",
      "lineCount": 152,
      "signedContent": {
        "url": "https://dev.azure.com/.....",
        "signatureExpires": "2024-09-27T07:02:09.196228Z"
      },
      "url": "xxx"
    },

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

回复示例:

  {
      "previousAttempts": [],
      "id": "7f7b1dbc-43db-46ec-b65b-1c43f8d1e622",
      "parentId": "c030fdeb-f86b-5c5b-c554-cff65560abe7",
      "type": "Task",
      "name": "Initialize job",
      .....
      "log": {
        "id": 5,
        "type": "Container",
        "url": "https://dev.azure.com/xx/xx/_apis/build/builds/27442/logs/5"
      },
      "task": null,
      "attempt": 1,
      "identifier": null
    },

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.