【发布时间】:2020-01-22 07:37:00
【问题描述】:
根据documentation“一个ARM模板是幂等的,这意味着它可以执行任意多次,每次结果都一样”。但我刚刚了解到,当我重新部署 AppService(没有任何更改)时,它会删除我的应用程序。端点不再响应,也没有应用程序日志,所以我转到 Azure 门户控制台,运行 DIR,令我惊讶的是,唯一的文件是 hostingstart.html!它是否记录在某处?这完全改变了我在发布管道中处理 ARM 模板的方式。
我正在使用链接模板。在主模板中我有这个资源:
{
"name": "myApp",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"dependsOn": [
"storage"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[uri(variables('templateBaseUrl'), 'myApp.json')]"
},
"parameters": {
"env": {
"value": "[parameters('env')]"
},
"myAppAppServiceSku": {
"value": "[parameters('myAppAppServiceSku')]"
},
"storageAccountName": {
"value": "[variables('storageAccountName')]"
}
}
}
}
和链接的模板
"resources": [
{
"name": "[variables('myAppServerFarmName')]",
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2018-02-01",
"location": "[resourceGroup().location]",
"tags": {
"ENV": "[parameters('env')]"
},
"sku": {
"name": "[parameters('myAppAppServiceSku')]"
},
"properties": {
}
},
{
"name": "[variables('myAppWebSiteName')]",
"type": "Microsoft.Web/sites",
"apiVersion": "2018-11-01",
"dependsOn": [
"[variables('myAppServerFarmName')]"
],
"location": "[resourceGroup().location]",
"tags": {
"ENV": "[parameters('env')]"
},
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', variables('myAppServerFarmName'))]",
"siteConfig": {
"alwaysOn": true
}
},
"resources": [
{
"name": "appSettings",
"type": "config",
"apiVersion": "2018-11-01",
"dependsOn": [
"[variables('myAppWebSiteName')]"
],
"tags": {
"ENV": "[parameters('env')]"
},
"properties": {
"storageAccountName": "[parameters('storageAccountName')]",
"storageKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts/', parameters('storageAccountName')), '2019-04-01').keys[0].value]"
}
}
]
}
]
编辑: 我已经使用 Kudu ZIP Deploy 检查了部署。在此部署之后,重新部署 ARM 模板不会删除代码!所以它按预期工作。所以发布管道的部署在某种程度上是不同的。
在我执行这两个步骤后,一切看起来都很好。但是当我然后只是执行第一步应用程序代码被删除。 这就是它现在的样子。
【问题讨论】:
-
我们每天部署数十次ARM模板,从不删除应用服务内容。
-
我刚刚在几分钟前再次测试了它。总是清除内容。而且我没有更改模板中的任何内容。我只是从 Release Pipelines 重新部署(经典?那些有 UI 的)。
-
因此,如果您部署新版本,您不知道之前的版本是否被 ARM 部署删除。我刚刚使用
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroup -TemplateUri $templateUri -TemplateParameterUri $templateParameterUri -Mode Incremental -DeploymentDebugLogLevel All对其进行了测试,它还删除了该应用程序。 -
我们每天还通过 Octopus Deploy 在 ARM 模板中部署数十个应用服务,并且永远不会让他们删除软件。
-
我使用您的模板作为测试工具,并使用 PowerShell 命令来部署它。然后在 Kudu 中通过 Push Zip deploy 将 ASP.Net 网站上传到它,然后重新运行 ARM 模板部署,部署后二进制文件仍在应用服务上。
标签: azure azure-devops azure-web-app-service azure-resource-manager