Azure

Azure Deploy 失敗後,我們部署的 AppService 為空

  • April 13, 2021

我們有一個 Azure DevOps 管道,它首先使用 ARM 模板部署我們的資源,然後使用 zip 部署我們的 AppServices。我們已經多次執行管道,並且應用程序正在正確執行。

在另一次部署嘗試之後的某個時間 - (資源的)第一個部署步驟失敗。部署中的更改包含對 AppService 的任何更改。並且失敗的部分不是AppService(而是說我們的數據庫),AppService 仍然不可用。看起來它已重置為預設託管設置。似乎以前的部署在“/data/SitePackages”文件夾中仍然可用,但“/site/wwwroot”文件夾僅包含預設的“hostingstart.html”文件。

我對增量部署的理解是,如果 AppService 未更改,它應該保留所有設置!(因此它之前的部署處於活動狀態。)

這是預設行為嗎?當部分部署失敗時,我們能否以某種方式保持以前的應用程序執行?我們是否需要選擇另一種部署策略?

我們的管道看起來像這樣;

jobs:
 - deployment: 'Deploy'
   environment: '${{ parameters.environment }}' # The environment to use in Azure Devops (controls the required approvals)
   variables:
     - template: '../variables/deploy-variables.yml'
       parameters:
         environment: '${{ parameters.environment }}'
   strategy:
     runOnce:
       deploy:
         steps:
         - task: AzureResourceManagerTemplateDeployment@3
           displayName: 'Azure - Deploy resources'
           inputs:
             deploymentScope: 'Resource Group'
             azureResourceManagerConnection: '${{ parameters.azureServiceConnection }}'
             subscriptionId: '$(azureSubscriptionId)'
             action: 'Create Or Update Resource Group'
             resourceGroupName: '$(resourceGroup)'
             location: 'West Europe'
             templateLocation: 'Linked artifact'
             csmFile: '$(Pipeline.Workspace)/drop-resources/files/arm/resources/azuredeploy.json'
             csmParametersFile: '$(Pipeline.Workspace)/drop-resources/files/arm/resources/azuredeploy.parameters.json'
             deploymentMode: 'Incremental'

         - task: AzureWebApp@1
           displayName: 'Deploy Service'
           inputs:
             azureSubscription: '${{ parameters.azureServiceConnection }}'
             appName: '$(serviceName)'
             package: '$(Pipeline.Workspace)/drop-app/archives/Service.zip'

通過將以下應用程序設置添加到資源(臂)部署中,我自己解決了這個問題;

"WEBSITE_ENABLE_SYNC_UPDATE_SITE": "true",
"WEBSITE_RUN_FROM_PACKAGE": "1",

這使目前包保持活動狀態,以前我們在包仍然可用時刪除了這些應用程序設置。

這是意料之中的。您的管道正在做兩件事,部署應用服務,然後部署您的應用。如果第一部分成功,它將使用預設文件部署應用程序服務,如果您的第二步失敗,那麼它將保持該狀態。

這應該只在第一次部署時發生。如果您在第一步成功的情況下執行後續部署,它不會覆蓋 Web 應用程序中的現有文件,它將保持原樣。如果您的第二步失敗,那麼舊文件應該仍然存在,除非您的第二步中途失敗並覆蓋了一些文件。

如果您想確保即使文件確實被覆蓋,您也可以選擇回滾到以前的版本,那麼您應該考慮使用部署槽

引用自:https://serverfault.com/questions/1055076