Web Deploy to Azure не заставляет веб-приложение получать новые изменения
У меня есть автоматическое развертывание, настроенное с моего GIT
на Azure App
с помощью Web Deploy
. Каждый раз, когда новый код помещается в репо, сборка запускается, а затем развертывается в Azure
с Web Deploy
.
Проблема в том, что Web App
(ASP.NET MVC) продолжает обслуживать запросы с использованием развернутого кода, и замена файла на самом деле не влияет на него. Даже если web.config был изменен. В принципе, единственный способ заставить новое приложение загрузить - перезагрузить его (или остановить/запустить) вручную.
вот мой профиль публикации:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<ADUsesOwinOrOpenIdConnect>False</ADUsesOwinOrOpenIdConnect>
<PublishProvider>AzureWebSite</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://app-name.azurewebsites.net</SiteUrlToLaunchAfterPublish>
<LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<MSDeployServiceURL>app-name.scm.azurewebsites.net:443</MSDeployServiceURL>
<DeployIisAppPath>app-name</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<UserName>$app-name</UserName>
<Password>...</Password>
<AllowUntrustedCertificate>True</AllowUntrustedCertificate>
<_SavePWD>True</_SavePWD>
<_DestinationType>AzureWebSite</_DestinationType>
</PropertyGroup>
</Project>
аналогичная тема в msdn без ответа
Ответы
Ответ 1
Дэвид уже поделился своими соображениями. Существует альтернативный способ решения этого сценария с помощью слотов развертывания. Вы можете создать слот, а затем настроить Auto-Swap, чтобы решить эту проблему. Это добавило преимущества нулевого холодного запуска и нулевого времени простоя.
Смотрите это для получения дополнительной информации:
Настройка автоматической замены
Ответ 2
Исправьте меня, если я ошибаюсь здесь, но что еще вы ожидали? Если приложение "работает", обслуживающий запрос, то сборки загружаются в память. Если вы их обновите, вы должны перезагрузить приложение для загрузки новых сборок. Насколько я знаю, нет способа удалить сборки из существующего AppDomain. Поэтому вам нужно создать новую (перезапуская приложение).
Одним из простых решений является развертывание файла app_offline.htm
вместе с вашим приложением. Если IIS видит этот файл, то перестает отвечать на новые запросы, запросы, которые уже в системе будут обслуживаться, тогда приложение будет остановлено. Для каждого нового запроса будет отображаться содержимое app_offline.htm
. После завершения развертывания запустите простой script с помощью WebDeploy, например. используя -postSync:runcommand=
в msdeploy
и просто удалите файл app_offline.htm
. Будет запущена новая версия приложения.
Если вы обновите файл web.config
, новая загрузка должна быть загружена автоматически. Но это не означает, что приложение будет полностью перезагружено.
Если у вас есть эта проблема со статическими файлами, возможно, HTTP-кэширование - это ваша проблема. Файлы обновляются, но клиенты (браузеры) загружают их из кеша. Подробнее см. этот вопрос.