将命令的stderr从构建任务传递到Azure DevOps

问题描述 投票:3回答:1

我有一个VSTS(Azure DevOps)构建,其中包含PowerShell或命令行任务。这个任务正在运行一些程序:program.exe。当program.exe返回非零退出代码时,构建将按预期失败。如果出现错误,program.exe还会向stderr流输出详细的错误消息。

问题是stderr流的内容没有传递给构建。该任务始终返回以下错误消息,该消息在构建摘要选项卡上也显示为构建失败消息:

使用退出代码1完成流程。

哪个没用。用户必须查找失败的任务,打开其输出并在那里搜索错误消息。那不是很方便。

如何轻松将stderr的内容传递给构建?

我是否必须手动捕获stderr然后使用PowerShell将其发送到构建版本,或者是否有一个设置来更改构建行为以按预期工作?

build azure-devops stderr
1个回答
1
投票

我刚刚在命令中添加了“2>&1 | Write-Host”,以便将stderr流路由到Write-Host流。引用此主题:VSTS build fails with "Process completed with exit code 0 and had 3 error(s) written to the error stream." even though I set my PowerShell script to ignore errors

您也可以尝试在PowerShell脚本配置中取消选中Fail on Standard Error并编写lastexitcode以传递任务:

Enter image description here

标准错误失败

如果这是真的,如果将任何错误写入错误管道,或者将任何数据写入标准错误流,则此任务将失败。否则,任务将仅依赖于$ LASTEXITCODE和退出代码来确定失败。

然后,您可以使用PowerShell或VSTS任务命令输出错误或警告。

Write-Warning “warning”
Write-Error “error”
Write-Host " ##vso[task.logissue type=warning;]this is the waring"
Write-Host " ##vso[task.logissue type=error;sourcepath=consoleapp/main.cs;linenumber=1;columnnumber=1;code=100;]this is an error "

有关VSTS任务命令的更多信息,请参阅:Logging Commands

© www.soinside.com 2019 - 2024. All rights reserved.