从 cli 交换 Azure App Service 时如何获取交换配置预览?

How to get a swap config preview when swapping Azure App Service from cli?

当通过门户将生产槽与 Azure 应用服务的暂存槽交换时,您会收到一个小警告,以防槽之间的配置不同。

我想在从命令行切换时收到相同的警告(例如 bash 中的 az),这可能吗?如果可以,该怎么做?

似乎没有任何方法可以在使用 Azure CLI 完成交换之前获得确认。

如果你想要一个确认对话框,你需要单独编写脚本,例如像这样

read -r -p "Are you sure? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
then
    az webapp deployment slot swap  -g MyResourceGroup -n MyUniqueApp --slot staging --target-slot production
fi

参考资料

  • 请参阅 this 页面以了解有关使用 cli 交换插槽的更多信息。
  • this 页面,了解有关 bash
  • 中条件执行语句的详细信息

设法使用 Azure CLI 和 jq(先安装)做到这一点。这与 Azure 门户在进行预览时所做的调用相同。所以,我添加了 Azure CLI 任务,然后:

echo Phase One changes
az rest -m post -u https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/<your_rg>/providers/Microsoft.Web/sites/<your_webapp_name>/slots/<slot_name>/slotsdiffs?api-version=2016-08-01 --body {\"targetSlot\":\"production\"} | jq -r "[.value[].properties | select(.diffRule == \"SlotSettingsMissing\") | .description ] | join(\";\")" 

echo Phase Two changes
az rest -m post -u https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/<your_rg>/providers/Microsoft.Web/sites/<your_webapp_name>/slots/<slot_name>/slotsdiffs?api-version=2016-08-01 --body {\"targetSlot\":\"production\"} | jq -r "[.value[].properties | select(.diffRule != \"SlotSettingsMissing\") | .description ] | join(\";\")" 

请注意,{subscriptionId} 将被替换,因此无需手动执行。 <> 中的其他参数无论如何都应该提供。

最后,我对 az cli 进行了扩展,用于比较和区分配置。毕竟这不是很难做到,同时我可以稍微扩展它的功能,并使不同 Web 应用程序之间的配置差异化成为可能,例如当同一服务部署在多个区域时很有用。

(此扩展程序目前未在任何地方公开提供,但如果有兴趣可能会提供)