Azure Release中运行dotnet命令未上报错误的技术求助
解决Azure Pipelines中dotnet运行dll异常但任务成功的问题
核心原因
Azure Pipelines任务默认根据脚本最后一条命令的退出码判断成败,若dotnet database.dll抛出异常时未返回非零退出码,或脚本中前序命令(如7z)覆盖了退出码,会导致任务误判为成功。另外failOnStandardError: true仅针对输出到stderr的内容触发失败,若dll将异常输出到stdout,该设置无效。
具体修复步骤
强制捕获dotnet命令的退出码:在脚本中显式检查
dotnet执行结果,失败时主动返回非零码给runner。修改后的脚本如下:7z x Database.zip dotnet database.dll EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then exit $EXIT_CODE fi其中
$?获取上一条dotnet命令的退出码,非零时直接退出脚本,传递错误码给任务runner。确保异常输出到stderr:若自定义dll抛出异常时输出到stdout,需修改dll代码,将错误信息写入标准错误流(stderr),让
failOnStandardError: true能触发任务失败。调整任务配置(可选):若正常操作也会输出内容到stderr(如7z的警告),可移除
failOnStandardError: true,仅依赖退出码判断任务成败,避免误触发失败。
修改后的完整任务配置示例:
- task: AzureCLI@2 displayName: 'Run DbUp' inputs: azureSubscription: ... scriptType: bash scriptLocation: inlineScript inlineScript: | 7z x Database.zip dotnet database.dll EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then exit $EXIT_CODE fi workingDirectory: '$(System.DefaultWorkingDirectory)/database'
内容的提问来源于stack exchange,提问作者Mike Cole
相关产品推荐
相关产品推荐

