Azure VM Run Command冻结阻塞DevOps管道,求稳定执行方案
解决Azure VM Run Command冻结导致流水线阻塞的问题
问题场景
在DevOps流水线中使用az vm run-command create在Windows Azure VM上执行PowerShell脚本时,多次运行后出现命令冻结情况:命令无法在超时时间内完成,后续新命令无法执行,甚至执行az vm run-command delete删除命令时也会冻结,导致流水线阻塞。全新VM首次运行正常,问题仅在多次流水线执行后出现。
流水线原执行及删除命令示例:
# 执行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 }" # 删除Run Command az vm run-command delete \ --name RecreateBinariesFolder$(Build.BuildId) \ --vm-name ${{ parameters.vmName }} \ --resource-group my-group-${{ parameters.environment }} \ --yes
已验证的有效解决方法
方法1:添加--no-wait参数并重建异常VM
2024-01-23更新:在删除Run Command的命令中添加--no-wait参数,并重建出现异常的VM后,连续数十次流水线运行未再出现冻结问题。推测原因为VM本身或CustomScriptExtension存在累积性异常。
修改后的删除命令:
az vm run-command delete \ --name RecreateBinariesFolder$(Build.BuildId) \ --vm-name ${{ parameters.vmName }} \ --resource-group my-group-${{ parameters.environment }} \ --yes \ --no-wait
方法2:预清理所有现有Run Command
2024-03-12更新:在每次执行新的Run Command前,批量删除指定资源组内所有VM的现有Run Command,进一步降低冻结概率。示例代码:
RG_NAME=my-resource-group VM_NAMES=$(az vm list -o json|jq -r '.[].name') for VM_NAME in $VM_NAMES; do VM_NAME=$(echo $VM_NAME|tr -d '\r\n') RUN_COMMANDS=$(az vm run-command list --vm-name $VM_NAME --resource-group $RG_NAME -o json) for CMD_NAME in $(echo $RUN_COMMANDS|jq -r '.[].name'); do CMD_NAME=$(echo $CMD_NAME|tr -d '\r\n') az vm run-command delete --name $CMD_NAME --vm-name $VM_NAME --resource-group $RG_NAME --yes --no-wait done done
替代方案推荐
如果Run Command的稳定性问题仍无法彻底解决,可以考虑以下更稳定的替代方案:
- Azure Automation Runbook:通过Azure Automation账户管理并执行PowerShell脚本,不依赖VM本地的扩展组件,适合批量、周期性的VM操作场景。
- WinRM直接执行:在流水线中使用PowerShell的
Invoke-Command通过WinRM直接连接VM执行脚本,绕过Azure Run Command的中间层,减少潜在的阻塞点。 - 优化脚本逻辑:检查脚本是否存在可能导致阻塞的操作(如长时间未响应的文件操作),添加日志输出和超时控制,便于快速定位问题。
内容的提问来源于stack exchange,提问作者Tommi L.
相关产品推荐
相关产品推荐

