如何在本地主机上找到管道日志?

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}
}