我认为对##vso[task.complete result=Failed;]的调用应该会使调用它的脚本步骤立即失败,但我现在在我的管道中看到了一个情况,但事实并非如此。
我的假设是错误的还是Azure管道脚本任务中存在错误?
我的构建代理在Ubuntu容器中运行任务,代理本身就是一个Linux代理。
您可以尝试在'##vso[task.complete result=Failed;]
'命令之后添加命令行'exit 1
'。
echo "##vso[task.complete result=Failed;]"
exit 1
同样,您也可以尝试在管道任务中使用日志记录命令">LogIssue"来记录任务中的错误。
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1
我刚刚做了一个小测试,使用下面的代码可以实现所需的目标,即在Azure pipelines web ui中中止一个错误步骤,但只显示一条错误消息:
echo "##vso[task.logissue type=error]Something went very wrong."
echo "##vso[task.complete result=Failed;]Make step fail"
exit 0
这工作得很好,但它看起来真的很难看,因为";退出0";给人的印象是步骤是可以的,但实际上状态将是"正常";失败";因为task.complete调用。
尽管如此,我还是想知道task.complete命令不中止该步骤的这种行为是否是";通过设计";或者我刚刚找到了一个解决bug的方法。
检查退出脚本的行附近是否有try-catch。
我花了一整天的时间解释为什么它显示错误,但任务永远不会被标记为失败。
如果在出口或[system.environment]::exit(1(行周围没有try-catch,它应该可以工作。。