我有一个VSTS构建,其中包含一个 PowerShell 或命令行任务。该任务正在运行某些程序:program.exe
。当program.exe
返回非零退出代码时,构建失败。如预期的那样。如果发生错误,program.exe
还会向stderr
流中显示详细的错误消息。
问题在于stderr
流的内容未传递到内部版本。该任务始终返回以下错误消息,该错误消息在生成摘要选项卡上也显示为生成失败消息:
以退出代码1完成的过程。
哪个没用。用户必须查找失败的任务,打开其输出并在此处搜索错误消息。那不是很方便。
我们如何轻松地将stderr
的内容传递给内部版本?
我是否必须手动捕获stderr
,然后使用PowerShell将其发送到内部版本,或者是否有设置可以更改内部版本行为以使其按预期工作?
答案 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来传递任务:
标准错误失败
如果为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