我想使用纯文本或文本文件中的 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调用:
根据您的要求,您需要获取纯文本或文本文件的 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
}
}