1

我们的环境:

  • 视窗服务器 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 的停机时间,有什么想法吗?

4

0 回答 0