将stderr传递到VSTS构建中

时间:2018-09-04 14:20:31

标签: build azure-devops stderr

我有一个VSTS构建,其中包含一个 PowerShell 命令行任务。该任务正在运行某些程序:program.exe。当program.exe返回非零退出代码时,构建失败。如预期的那样。如果发生错误,program.exe还会向stderr流中显示详细的错误消息。

问题在于stderr流的内容未传递到内部版本。该任务始终返回以下错误消息,该错误消息在生成摘要选项卡上也显示为生成失败消息:

  

以退出代码1完成的过程。

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

我们如何轻松地将stderr的内容传递给内部版本?

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

1 个答案:

答案 0 :(得分:0)

我刚刚在命令中添加了“ 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

  

标准错误失败

     

如果为true,则如果将任何错误写入到   错误管道,或者是否有任何数据写入标准错误   流。否则,任务将仅依靠$ 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