我正在使用
az vm run-command create ..
工具在 Windows Azure VM 上运行几个 PowerShell 脚本作为 DevOps 管道的一部分。有时命令会冻结并且无法在适当的时间内完成。发生这种情况时,我无法再执行这些命令,并且它开始阻止 DevOps 管道运行。 ...而且如果我尝试使用 az vm run-command delete ..
删除运行命令,它也会冻结。
作为 DevOps 管道一部分的运行命令执行(和删除)示例:
# Execute the script on VM with run-command
az vm run-command create \
--name RecreateBinariesFolder$(Build.BuildId) \
--vm-name ${{ parameters.vmName }} \
--resource-group my-group-${{ parameters.environment }} \
--timeout-in-seconds 600 \
--script "if(Test-Path C:\\temp\\packages\\){ Remove-Item -Path c:\\temp\\packages -Force -Recurse } ; if(!(Test-Path C:\\temp\\packages\\)){ mkdir c:\\temp\\packages }"
# Delete the run-command from VM
az vm run-command delete \
--name RecreateBinariesFolder$(Build.BuildId) \
--vm-name ${{ parameters.vmName }} \
--resource-group my-group-${{ parameters.environment }} \
--yes
它通常在新的虚拟机上运行良好,但在稍后的管道运行中一段时间后执行开始冻结。
有什么方法可以更稳定地执行运行命令,或者有其他方便的方法可以更轻松、更稳定地在 Windows 虚拟机上运行命令吗?
如果您的要求是运行 powershell 脚本,为什么不使用默认命令
RunPowerShellScript
,如 az vm run-command invoke
文档第三个示例中所述?
RunPowershellScript
是 Windows VM 可用命令的一部分,如使用操作运行命令在 Windows VM 中运行脚本中所述。 这可能是您的情况下的命令:
az vm run-command invoke \
--command-id RunPowerShellScript \
--name ${{ parameters.vmName }} \
-g my-group-${{ parameters.environment }} \
--scripts 'if(Test-Path C:\\temp\\packages\\){ Remove-Item -Path c:\\temp\\packages -Force -Recurse } ; if(!(Test-Path C:\\temp\\packages\\)){ mkdir c:\\temp\\packages }'
这样您就不需要创建新的命令类型并将其删除。此外,在代码中您创建了一个新命令但从未调用它。您是否错过了调用它的代码?
虚拟机中可以创建的最大命令数似乎是 25(请参阅