我想使用纯文本或文本文件中的 API 调用来获取特定构建 ID 的成功管道中生成的日志,而不使用任何工件。
有人可以帮我解决这个问题吗? 我们有哪些方法和先决条件?
提前致谢
我尝试使用 powershell 运行 API 调用,它提供了管道日志,例如执行时间和创建时间、LogID 所有这些,但不是生成的输出。
我使用过这个API调用
根据您的要求,您需要获取纯文本或文本文件的 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
}
}