我曾认为调用 ##vso[task.complete result=Failed;] 会立即使脚本步骤失败,但我现在在我的管道中看到了一个例外。
是我的假设有误还是Azure流水线脚本任务存在漏洞?
我的构建代理在Ubuntu容器中运行该任务,代理本身是Linux代理。
我曾认为调用 ##vso[task.complete result=Failed;] 会立即使脚本步骤失败,但我现在在我的管道中看到了一个例外。
是我的假设有误还是Azure流水线脚本任务存在漏洞?
我的构建代理在Ubuntu容器中运行该任务,代理本身是Linux代理。
##vso[task.complete result=Failed;]
”命令之后添加命令行“exit 1
”。echo "##vso[task.complete result=Failed;]"
exit 1
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1
我刚刚进行了一个小测试,使用以下代码可以实现中止步骤并在 Azure 管道 Web UI 中仅显示一个错误消息的期望目标:
echo "##vso[task.logissue type=error]Something went very wrong."
echo "##vso[task.complete result=Failed;]Make step fail"
exit 0
这个程序运行得很好,但是看起来非常丑陋,因为"exit 0"给人的印象是步骤已经完成了,但实际上由于task.complete调用的原因,状态将会是"失败"。
尽管如此,我仍然想知道task.complete命令不中止步骤的行为是"按设计"还是我发现了一个漏洞的解决方法。
检查一下在退出脚本的那行代码周围是否有try-catch块。
我花了整整一天才明白为什么它一直显示错误,但任务从未被标记为失败。
如果在退出或 [system.environment]::Exit(1) 行周围没有try-catch块,它应该可以工作。
exit 1
**。我们无法仅使用日志记录命令即可立即使脚本步骤失败。 - Bright Ran-MSFT