【问题标题】:Pass command's stderr from a build task into Azure DevOps将命令的标准错误从构建任务传递到 Azure DevOps
【发布时间】:2018-09-04 14:20:30
【问题描述】:

我有一个包含 PowerShell命令行 任务的 VSTS (Azure DevOps) 版本。该任务正在运行某个程序:program.exe。当program.exe 返回非零退出代码时,构建将按预期失败。 program.exe 还会将详细的错误消息打印到 stderr 流以防出错。

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

进程已完成,退出代码为 1。

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

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

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

【问题讨论】:

    标签: build azure-devops stderr


    【解决方案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 以传递任务:

    标准错误失败

    如果这是真的,如果写入任何错误,此任务将失败 错误管道,或者是否有任何数据写入标准错误 溪流。否则,该任务将仅依赖于 $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

    【讨论】:

    • 谢谢,但它仍然不理想,因为 stderr 流中的每一行都被认为是一个错误,但它仍然在末尾添加了另一个错误,即“PowerShell exited with code '1'”。
    • 在哪里可以找到 PowerShell 脚本配置
    • @KarlMorrison 如果你有管道的 yaml,failOnStderr 可以作为参数传递给powershell 任务。 link
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多