最简单的方法来每晚部署ASP.NET MVC 3网站?

时间:2011-12-06 17:34:51

标签: visual-studio-2010 deployment jenkins

我在C#中有一个ASP.NET MVC 3网站

  • ASP.NET MVC 3 Internet Project
  • 域名项目(班级图书馆)
  • 单元测试项目
  • SQL Server 2008 R2数据库
  • Mercurial上的源代码管理

什么是最简单的方法来进行12:00 AM自动每晚构建和部署网站,以便我每天都可以访问dev.mycompany.com并看到我的Dev版本的实时更新版本?

我正在考虑使用Jenkins来完成所有建筑。

1 个答案:

答案 0 :(得分:12)

我帮助保持这样的系统 - 在詹金斯。显然,细节会根据您的项目结构而有所不同,但这里大致是我们的Jenkins工作所做的:

  • 拉代码(我们使用Git,但Jenkins也有一个Mercurial插件)
  • 从幂等脚本对我们的测试数据库执行任何SQL架构更改(我们使用的是一个在使用Hudson / Jenkins之前的Ant脚本)
  • 运行msbuild(另一个Jenkins插件)
    • 构建文件是我们的.sln(或者你可以使用web .csproj - 参数略有不同)
    • 命令行参数:
      • / p:Configuration = Dev / p:Platform =“Any CPU”/ p:DeployOnBuild = true / p:DeployTarget = Package /p:DeployIisAppPath="dev.mycompany.com/“/ v:m
    • 这会构建一个.zip文件,一个.cmd文件和一些.xml文件,其中包含部署站点更新所需的一切
  • 启动另外两个“msdeploy”Jenkins作业,每个.NET Web服务器上一个
    • 每个.NET Web服务器也是Jenkins slave
    • 我们有两台服务器正在测试,通过NLB平衡
    • 每个“msdeploy”作业将.zip / .cmd / .xml文件从构建服务器复制到Web服务器上的临时位置,然后运行.cmd文件
    • .cmd文件执行msdeploy,它将您需要的所有内容推送到您的开发Web服务器

我们有一个单独的工作来运行我们的NUnit测试,但您可以轻松地将测试合并到您的主要工作中。我们构建整个.sln而不是web .csproj的原因之一是我们可以从相同的构建代码运行我们的单元测试。

如果您还没有,则需要在构建服务器上安装ASP.NET MVC3,.NET 4和msdeploy,我相信您也需要Web服务器上的大多数相同文件。

对于调度,您可以选择“定期构建”或“轮询SCM”作为构建触发器,然后使用类似cron的语法(0 0 * * *)在午夜每天运行。