微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Azure 管道中的“az vm run-command”获取退出代码

如何解决从 Azure 管道中的“az vm run-command”获取退出代码

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

为此,我使用 Azure CLI task 向 VM 发出命令(例如 az vm startaz vm run-command ... 等)。

我面临的问题是,即使您在 VM 上运行的脚本返回非零状态代码az vm run-command 也会“成功”。例如,这个“坏”的虚拟机脚本:

az vm run-command invoke -g <group> -n <vmName> --command-id RunShellScript --scripts "cd /nonexistent/path"

返回以下响应:

{
  "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
    }
  ]
}

所以,命令成功了,大概是因为它成功地在虚拟机上执行了脚本。脚本实际上在 VM 上失败的事实隐藏在响应“消息”中

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

一个想法是解析响应(以某种方式)并搜索 stderr 下的文本 - 但这听起来很麻烦,我什至不确定如何“访问”任务中的响应.

解决方法

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

enter image description here

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。