如何在本地主机上找到管道日志?
How to find the pipeline log on the localhost?
我可以在网页上获取到所有的日志,但是localhost控制台没有输出这个日志。
版本:TFS 2019
https://paste.ubuntu.com/p/9KHmJbrJQg/
更新2020.10.23
https://paste.ubuntu.com/p/ph6hd4pMn3/
您正在使用 self-hosted 代理,日志位于文件夹 _diag
中(该文件夹位于 agnet 根文件夹中)。您可以参考此doc了解更多详情。
测试日志应该在文件夹_diag\pages
这些是本地主机上的管道日志。
更新1
作为解决方法,我们可以配置 pipeline Trigger 并添加 Power shell 脚本来调用 rest API 以下载完整日志。
比如你原来的pipeline是A,我们需要创建Build pipeline B,在pipeline B中配置pipeline trigger,然后添加任务power shell
,输入下面的脚本。
电源shell脚本:
$PipelineLogURL = "$($env:SYSTEM_TASKDEFINITIONSURI)$env:SYSTEM_TEAMPROJECT/_apis/build/builds/$env:BUILD_TRIGGEREDBY_BUILDID/logs?api-version=6.1-preview.2"
#$PipelineLogURL = https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs?api-version=5.0
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PipelinelogInfo = Invoke-RestMethod -Uri $PipelineLogURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
#List log ID
ForEach ($LogID in $PipelinelogInfo.value.id){
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PipelineDetailsLogURL = "$($env:SYSTEM_TASKDEFINITIONSURI)$env:SYSTEM_TEAMPROJECT/_apis/build/builds/$env:BUILD_TRIGGEREDBY_BUILDID/logs/$($LogID)"
#$PipelineDetailsLogURL = https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs/$LogID?api-version=5.0
#Get log detail info and save it
$PipelinelogDetail = Invoke-RestMethod -Uri $PipelineDetailsLogURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get –OutFile C:\vitolog$LogID.txt
}
结果:
更新2
根据错误提示,您的电源shell似乎不支持Invoke-RestMethod
,请运行命令$PSVersionTable
检查您的电源[=68] =] 版本,这是我的力量 shell 版本和 TFS 版本是 TFS2019,它有效。
打开管道和select选项卡测试获取日志,然后启用选项Allow scripts to access the OAuth token
注意:我添加了一些打印信息的代码,如果有效,你可以删除它们。
电源shell脚本:
$PipelineLogURL = "https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs?api-version=5.0"
Write-Host $PipelineLogURL
$PipelinelogInfo = Invoke-RestMethod -Uri $PipelineLogURL -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host $PipelinelogInfo.value.id
ForEach ($LogID in $PipelinelogInfo.value.id){
Write-Host $LogID
$PipelineLogURL = "https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs/$($LogID)?api-version=5.0"
$PipelinelogDetail = Invoke-RestMethod -Uri $PipelineLogURL -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get –OutFile {path}
}
我可以在网页上获取到所有的日志,但是localhost控制台没有输出这个日志。
版本:TFS 2019
https://paste.ubuntu.com/p/9KHmJbrJQg/
更新2020.10.23
您正在使用 self-hosted 代理,日志位于文件夹 _diag
中(该文件夹位于 agnet 根文件夹中)。您可以参考此doc了解更多详情。
测试日志应该在文件夹_diag\pages
这些是本地主机上的管道日志。
更新1
作为解决方法,我们可以配置 pipeline Trigger 并添加 Power shell 脚本来调用 rest API 以下载完整日志。
比如你原来的pipeline是A,我们需要创建Build pipeline B,在pipeline B中配置pipeline trigger,然后添加任务power shell
,输入下面的脚本。
电源shell脚本:
$PipelineLogURL = "$($env:SYSTEM_TASKDEFINITIONSURI)$env:SYSTEM_TEAMPROJECT/_apis/build/builds/$env:BUILD_TRIGGEREDBY_BUILDID/logs?api-version=6.1-preview.2"
#$PipelineLogURL = https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs?api-version=5.0
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PipelinelogInfo = Invoke-RestMethod -Uri $PipelineLogURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
#List log ID
ForEach ($LogID in $PipelinelogInfo.value.id){
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PipelineDetailsLogURL = "$($env:SYSTEM_TASKDEFINITIONSURI)$env:SYSTEM_TEAMPROJECT/_apis/build/builds/$env:BUILD_TRIGGEREDBY_BUILDID/logs/$($LogID)"
#$PipelineDetailsLogURL = https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs/$LogID?api-version=5.0
#Get log detail info and save it
$PipelinelogDetail = Invoke-RestMethod -Uri $PipelineDetailsLogURL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get –OutFile C:\vitolog$LogID.txt
}
结果:
更新2
根据错误提示,您的电源shell似乎不支持Invoke-RestMethod
,请运行命令$PSVersionTable
检查您的电源[=68] =] 版本,这是我的力量 shell 版本和 TFS 版本是 TFS2019,它有效。
打开管道和select选项卡测试获取日志,然后启用选项Allow scripts to access the OAuth token
注意:我添加了一些打印信息的代码,如果有效,你可以删除它们。
电源shell脚本:
$PipelineLogURL = "https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs?api-version=5.0"
Write-Host $PipelineLogURL
$PipelinelogInfo = Invoke-RestMethod -Uri $PipelineLogURL -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host $PipelinelogInfo.value.id
ForEach ($LogID in $PipelinelogInfo.value.id){
Write-Host $LogID
$PipelineLogURL = "https://{instance}/{collection}/{project}/_apis/build/builds/{buildId}/logs/$($LogID)?api-version=5.0"
$PipelinelogDetail = Invoke-RestMethod -Uri $PipelineLogURL -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get –OutFile {path}
}