如何在自动Azure资源组部署中处理错误/失败?

时间:2016-04-01 14:49:31

标签: powershell azure azure-powershell azure-resource-manager azure-deployment

我已阅读Azure中automatically deploying resources groups的各种文章,包括使用templates以及如何troubleshoot部署失败。

这些文章中不清楚的是,如果有任何内容,则构建回滚功能,和/或在部署过程中出现错误时将资源基础架构恢复到上一个​​成功状态的最佳方法。

例如,在Octopus Deploy中,存在某些构建步骤的概念,这些步骤仅在发生故障时触发,这实际上使所有内容都恢复到部署开始之前的状态。

我可以看到有可能"验证"您的模板和基础架构通过运行Test-AzureRmResourceGroupDeployment cmdlet来减少实际运行部署之前的潜在错误,并且还可以通过运行Get-AzureRmResourceGroupDeployment来查看部署后的配置状态:

enter image description here

我可以从中检查failed状态并有条件地运行脚本以在失败后进行清理。

但是,是否有内置的东西可以满足这种情况?

2 个答案:

答案 0 :(得分:1)

虽然可以在现有环境的顶部滚动部署。模板的主要目的是(或似乎是)部署新环境。

这意味着如果出现问题,您将删除整个内容并重新开始。或者创建自己的逻辑以进入并找出原因。 Azure在发生故障时唯一能做的就是向您报告。然后由您决定如何对此做出反应。

我个人的方法是通过模板(虚拟机,存储等)部署基本构建块,然后让配置管理引擎接管部署软件的更复杂任务,并定义配置。确实有能力回滚并修复它们的东西。

答案 1 :(得分:0)

这就是我所说的。它可能会有所帮助,但基本上你必须抛出自己的错误,因为Test-AzureRmResourceGroupDeployment的结果是成功为null,但是当它失败时有一个对象。

Do{
   Try{
       Write-Output "Testing Deployment..."
       If ($TestResult = Test-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName -TemplateFile $VMTemplatePath -TemplateParameterObject $VMDeploymentParameters) {
          Throw "Testing failed.`r`n$($TestResult.Message)`r`n"
       }
       Write-Output "Testing complete."
       $TestResponse = "N"
   }
   Catch{
       Write-Output $_
       If ($TestResponse = (Read-Host "Would you like to try again? Y/N.") -ne "Y") { Exit }
   }
}
While($TestResponse -eq "Y")

干杯

路易斯