Asp.Net 5, MSDeploy и IIS не удалось обновить после развертывания
Наше окружение:
- Windows Server 2012 R2
- IIS 8.5
- ASP.NET 5 / dnx-clr-win-x64.1.0.0-rc1-update1
- Сборка с помощью Visual Studio Team Services и MSBuild для локального агента (со следующими аргументами /p:DeployOnBuild=true;DeployMethod=Package;PublishDNXVersion=dnx-clr-win-x64.1.0.0-rc1-update1)
- Агент Microsoft Web Deploy 3.6
Мы используем непрерывную интеграцию Team Services. Всякий раз, когда кто-то синхронизирует свои коммиты, Team Services / TFS клонируют новую версию репозитория, запускают MS Build с (/p:DeployOnBuild=true;DeployMethod=Package;PublishDNXVersion=dnx-clr-win-x64.1.0.0-rc1-update1), а затем вызвать файл bat для запуска MSDeploy.exe на двух разных серверах с балансировкой нагрузки.
Примерно в 85% случаев процесс развертывания работает без нареканий. В остальное время обновление висит где-то, и я не уверен, где. Другими словами, я не вижу изменений, которые кто-то сделал в Razor, изменений, которые кто-то сделал в файле CSS, и т. Д. С другой стороны, это то, что я знаю:
- Если я запускаю / останавливаю пул приложений, он каждый раз выбирает новый код.
- Если я перезапускаю пул приложений, он почти каждый раз собирает новый код.
- Если я перезапускаю экземпляр IIS, он работает большую часть времени.
- Проблема может возникнуть в блоке 1, но не в блоке 2. В других случаях все наоборот.
Я пробовал различные варианты MS Deploy:BASE OPTION # 1
@"msdeploy.exe"
-source:iisapp=%SOURCE_FOLDER%
-dest:iisapp=%DEST_IISAPP%,
computerName=%COMPUTER_NAME2%,
userName=%USERNAME%,
password=%PASSWORD%,
includeAcls='False'
-enablelink:contentlibextension
-verb:sync
Вариант № 1 (запуск / остановка экземпляра IIS после развертывания):
postsync:runCommand="C:\windows\system32\inetsrv\AppCmd Stop Site %DEST_ISSAPP_NAME% & C:\windows\system32\inetsrv\AppCmd Start Site %DEST_ISSAPP_NAME%"
Вариант № 2 (в автономном режиме):
...,appOfflineTemplate="maintenance.html" -enablerule:AppOffline
Мы привыкли сбрасывать файл Web.Config в приложениях веб-форм Asp.Net 4.5 для принудительной перезагрузки, но DNX, похоже, блокирует файл Web.Config и не позволяет нам обновлять его во время работы сайта.
Любые мысли о том, как мы можем лучше всего автоматизировать процесс утилизации, ограничивая время простоя в производстве и UAT?