从Azure管道中的“az vm运行命令”获取退出代码

从Azure管道中的“az vm运行命令”获取退出代码,azure,azure-devops,azure-pipelines,azure-cli,azure-vm,Azure,Azure Devops,Azure Pipelines,Azure Cli,Azure Vm,我在Azure管道中运行了一个相当庞大的构建,这涉及到处理大量数据,因此需要太多的内存供我的buildagent处理。因此,我的方法是启动一个linux虚拟机,在那里运行构建,并将生成的docker映像推送到我的容器注册表中 为了实现这一点,我使用向VM发出命令(例如,az VM start,az VM run命令…等) 我面临的问题是az vm run命令“成功”,即使在vm上运行的脚本返回非零状态代码。例如,此“坏”vm脚本: az vm run-command invoke -g <

我在Azure管道中运行了一个相当庞大的构建,这涉及到处理大量数据,因此需要太多的内存供我的buildagent处理。因此,我的方法是启动一个linux虚拟机,在那里运行构建,并将生成的docker映像推送到我的容器注册表中

为了实现这一点,我使用向VM发出命令(例如,
az VM start
az VM run命令…
等)

我面临的问题是
az vm run命令
“成功”,即使在vm上运行的脚本返回非零状态代码。例如,此“坏”vm脚本:

az vm run-command invoke -g <group> -n <vmName> --command-id RunShellScript --scripts "cd /nonexistent/path"
因此,该命令成功了,可能是因为它成功地在VM上执行了脚本。脚本在VM上实际失败的事实隐藏在响应“消息”中

如果VM上的脚本返回非零状态代码,我希望Azure管道任务失败。我将如何实现这一点


一个想法是(以某种方式)解析响应并在
stderr
下搜索文本-但这听起来像是一个真正的麻烦,我甚至不知道如何在任务中“访问”响应。

您在Azure CLI任务上启用了选项“标准错误失败”?如果没有,您可以尝试启用它并再次运行管道,以查看错误“
cd:can-cd-to/nonexistent/path
”是否会导致任务运行失败


如果任务仍然通过,则错误“
cd:can't cd to/nonexistent/path
”不应为标准错误。在这种情况下,您可能需要在脚本中添加更多命令行来监视
az
命令的输出日志。一旦有任何输出消息显示错误,执行“
退出1
”退出脚本并返回标准错误以使任务失败。

感谢您的建议,我不敢相信我错过了该字段。我已将其设置为true,但任务仍然成功,响应消息:
“message:“Enable successed:\n[stdout]\n\n[stderr]\n/var/lib/waagent/run command/download/116/script.sh:1:cd:can't cd to/does/not/exist\n”,
我认为这是因为
stderr
流中没有命令本身,即
az vm run命令
——相反,它被json responseHi@ChrisMarais的消息属性掩埋了,是的,我同意你的猜测。简而言之,这不是一个标准错误。因此,正如我前面提到的,您需要检查
az vm run命令的响应消息,以查看它是否包含任何故障或错误。
{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n/var/lib/waagent/run-command/download/87/script.sh: 1: cd: can't cd to /nonexistent/path\n",
      "time": null
    }
  ]
}