Azure
Azure Deploy 失敗後,我們部署的 AppService 為空
我們有一個 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 應用程序中的現有文件,它將保持原樣。如果您的第二步失敗,那麼舊文件應該仍然存在,除非您的第二步中途失敗並覆蓋了一些文件。
如果您想確保即使文件確實被覆蓋,您也可以選擇回滾到以前的版本,那麼您應該考慮使用部署槽。