我们的环境:
- 视窗服务器 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 部署 3.6 代理
我们使用 Team Services 持续集成。每当有人同步他们的提交时,Team Services / TFS 将克隆一个新版本的存储库,使用 (/p:DeployOnBuild=true;DeployMethod=Package;PublishDNXVersion=dnx-clr-win-x64.1.0.0-rc1 运行 MS Build -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
我们习惯于在 Asp.Net 4.5 Web Form Apps 中重置 Web.Config 文件以强制回收,但 DNX 似乎锁定了 Web.Config 文件并且不允许我们在站点运行时对其进行更新。
关于我们如何最好地自动化回收过程,同时限制生产和 UAT 的停机时间,有什么想法吗?