【问题标题】:Deploying ARM templates from Azure Release Pipelines removes code从 Azure Release Pipelines 部署 ARM 模板会删除代码
【发布时间】: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


【解决方案1】:

请参阅Azure Functions ARM template redeployment deletes my published functions 了解更多信息。本质上,您需要将其添加到您的模板中:

{ "name": "WEBSITE_RUN_FROM_PACKAGE", "value": "1" }

【讨论】:

  • 这是不同类型的部署。我正在使用 WebDeploy。从那时起,我重构了我的发布管道,我现在按预期工作。我不知道出了什么问题。
  • @PiotrPerak 您从无“从包运行”变为从包运行。您有一个设置为“选择最佳部署模式”的版本,该版本从包中选择运行。在您的新版本中,您自己选择了部署模式。
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 2020-02-06
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多