Azure Pipelines代理中任务日志存储位置及链接提取问询
Azure Pipelines任务日志在代理上的存储位置及日志链接获取方案
代理上的日志存储路径
自托管代理
自托管代理的任务日志默认存储在代理工作目录的_work/_logs子目录下,完整路径示例:
- Windows:
C:\agent\_work\_logs(默认安装路径) - Linux/macOS:
~/agent/_work/_logs(默认安装路径)
每个任务的日志以.log格式保存,文件名包含任务ID与名称相关标识。
微软托管代理
微软托管代理在任务执行完成后会被销毁,日志文件不会保留在代理本地,无法在代理上访问到这些文件。
无需解析本地日志:直接获取日志链接的方案
如果你需要将任务日志链接作为后续任务的变量,无需从本地日志文件解析,可通过Azure DevOps REST API直接获取,步骤如下:
1. 利用预定义变量获取关键ID
Release Pipeline中可直接使用以下预定义变量:
$(Release.Id):当前发布ID$(Release.EnvironmentId):当前发布环境ID$(System.JobId):当前任务所属作业ID$(System.TaskInstanceId):当前任务实例ID
2. 调用REST API获取日志链接
以PowerShell任务为例,添加如下脚本(需启用任务的允许脚本访问OAuth令牌选项):
$orgUrl = "$(System.TeamFoundationCollectionUri)" $projectName = "$(System.TeamProject)" $releaseId = "$(Release.Id)" $envId = "$(Release.EnvironmentId)" $jobId = "$(System.JobId)" $taskId = "$(System.TaskInstanceId)" $accessToken = "$(System.AccessToken)" $headers = @{ "Authorization" = "Bearer $accessToken" "Content-Type" = "application/json" } # 构造日志API请求地址 $apiUrl = "$orgUrl$projectName/_apis/release/releases/$releaseId/environments/$envId/jobs/$jobId/tasks/$taskId/logs?api-version=7.1-preview.2" # 调用API获取日志链接 $logResult = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get # 将日志链接设置为全局变量,供后续任务使用 Write-Host "##vso[task.setvariable variable=TaskLogUrl;isOutput=true;]$($logResult.url)"
执行该脚本后,后续任务可通过$(TaskLogUrl)变量直接访问当前任务的日志链接。若需获取其他任务的日志链接,只需替换$(System.TaskInstanceId)为对应任务的实例ID即可。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

