使用TeamCity进行ASP.NET MVC3项目的自动化部署

关于如何使用TeamCity进行项目代码检出,编译的文章网络上有很多,但是关于如何进行项目部署,尤其是关于ASP.NET MVC3项目部署的资料却少得可怜。折腾两天后,终于将部署完成,于是记录一下部署的方法:

准备

1 工程的准备

首先要稍微配置一下需要部署的工程,设置部署包的位置和目标IIS上的网站/应用程序名称,如下图: 

2 构建(build)服务器的准备

构建服务器上.NET Framework 4和ASP.NET MVC3自然少不了,但是因为这是Web工程,因此仅安装这两个会造成便以失败,如下图:

看出错信息可知是缺少了Visual Studio 2010中的几个文件,需要将VS2010对应目录下的Web和WebApplications两个文件夹复制到构建服务器的相应位置:

除此以外,还需要安装Web deploy,因为我们需要用它来进行上传部署工作。

3 部署服务器的准备

部署服务器上也需要安装Web deploy,注意,不要通过Web Platform Installer安装,使用WebPI安装的话IIS中会缺少一个选项,具体过程可以参照 http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_24.html

接下来就是TeamCity中的设置

1 创建项目

创建项目在此也不再赘述,详情可以自行谷歌。

2 创建构建配置

自动化部署主要分为三个部分:

1) 构建解决方案,进行单元测试

2) 单元测试通过后对Web项目进行打包

3) 打包完成后执行部署

首先创建构建配置来构建解决方案:

这部分的详细设置可以参考官方文档,在设置完配置文件后保存,返回Add Build Step页面,继续Add build step来添加部署的第二部分:

注意图中空色框部分,这个参数的作用是告诉MSBuild进行项目打包(当然也可以通过将上面的Targets属性设置为Package来实现相同的作用)。在这一步执行完成之后,在配置的目录下会生成用于部署的批处理文件和压缩文件:

生成文件的位置是由项目文件指定的(即由准备的第一步指定)。

保存后继续Add build step。

最后一步用于调用生成的批处理文件执行部署工作:

关于命令行参数的含义:

> > =========================== > 必需的标志: > -------------------------- > /T: > 使用“-whatif”标志调用 msdeploy.exe,这将模拟部署。此操作不会部署包,而是创建一个报告,报告当您实际部署包时将发生的情况。 > /Y: > 不使用“-whatif”标志调用 msdeploy.exe,这会将包部署到当前计算机或目标服务器。在验证通过使用 /T 标志生成的输出之后,请使用 /Y。 > > 注意: 不要在同一条命令中同时使用 /T 和 /Y。 > > =========================== > 可选标志: > -------------------------- > 默认情况下,在使用当前用户凭据而非代理服务调用此脚本的当前计算机上部署此脚本。仅针对高级方案传递以下值。 > > /M:<目标服务器名称或服务 URL> > 如果未指定此标志,则在运行命令的计算机上安装此包。服务 URL 的格式可以是: > https://<目标服务器>:8172/MSDeploy.axd > 此格式要求在目标服务器上安装 IIS 7 并且设置 IIS 7 Web 管理服务(WMSvc)和 Web 部署处理程序。 > 服务 URL 的格式也可以是: > http://<目标服务器>/MSDeployAgentService > 此格式需要目标服务器上的管理权限并且要求在目标服务器上安装 Web Deploy 远程服务(MsDepSvc)。IIS 7 不必安装在目标服务器上。 > > /U:<用户名> > /P:<密码> > /G: > 指定通过在目标服务器上创建临时侦听器来部署包。这不需要在目标服务器上进行任何特别安装,但要求您是该服务器上的管理员。此标志的默认值是 False。 > > /A: > 指定要使用的身份验证的类型。可能值是 NTLM 和 Basic。如果指定 wmsvc 提供程序设置,则默认身份验证类型是 Basic;否则,默认身份验证类型是 NTLM。 > > /L > 指定将包部署到本地 IISExpress 用户实例。 > > [其他 msdeploy.exe 标志] > msdeploy.exe 命令支持其他标志。可以在“$(ProjectName).Deploy.cmd”文件中包括任何其他标志,并在执行过程中将标志传递给 msdeploy.exe。 > 或者,也可以通过设置“_MsDeployAdditionalFlags”环境变量来指定其他标志。这些设置由此批处理文件使用。 > 注意: 包括等号(=)在内的任何标志值必须包含在双引号内(如以下示例所示),这样将跳过部署包括在包中的数据库: > "-skip:objectName=dbFullSql" > >

例如:/Y /M:https://host:8172/msdeploy.axd /U:user /P:pass /a:basic -allowUntrusted

表示部署到host服务器,使用user作为用户名,pass作为密码,允许不安全链接。

保存后执行build任务,就会发现代码被自动构建并部署到了目标服务器上。配合Github和trigger设置,就能够实现有新代码被推送时能够自动检出并构建部署。