如何强制使用 ARM 模板 + CustomScriptExtension 创建的 VM 重新下载脚本并 运行 它?

How to force VM created with an ARM template + CustomScriptExtension to redownload the script and run it?

CI/CD进程:

  1. 编译可执行文件并将其上传到 Azure 存储。
  2. 将 "custom script"(下载可执行文件并 运行 保存)上传到 Azure 存储。
  3. 部署具有 CustomScriptExtension 的 VM 的 ARM 模板,该模板下载并 运行s 自定义脚本。

后续构建会更新脚本和可执行文件,但 VM 不会下载更新后的脚本。如何让它重新下载和 运行 将 运行 更新后的可执行文件的脚本?

为了在现有 VM 上执行 CustomScriptExtension,该扩展的配置必须比上次部署时 "different" - 如果看起来相同,即每个 属性 json 资源中的值与上次相同,未重新应用扩展。

您可以通过两种简单的方式进行配置 "different"。

1) 是更改资源中的任何 属性 值,这可能并不总是实用(并且在某些情况下与您真正想要做的相反)所以最合理的 属性要更改的是 fileUris 属性。通常,此 属性 包含为该特定部署生成的 sasToken。由于每次 属性 值更改时 sasToken 都是不同的并且重新应用扩展。您可以在此处查看示例:

https://github.com/bmoore-msft/AzureRM-Samples/tree/master/VMCSEInstallFilePS

查看根目录中用于部署模板的脚本。

2) 如果#1 不适合工作流,您可以通过在资源上使用 forceUpdateTag 属性 来更好地控制它。您 "seed" 在第一次部署时使用您想要的任何字符串来设置此值,然后在后续部署中更改该值以重新应用扩展。因此,例如,您可以使用一个参数并在您想要强制更改时递增该值。

HTH