帮我提出一个部署策略

时间:2009-08-31 22:21:13

标签: asp.net asp.net-mvc deployment

所以我有一个我正在开发的ASP.NET MVC网站,从来没有一个像样的部署策略,因此进行更改,特别是数据库方案可能涉及很多步骤和时间。

以下是我正在寻找的步骤,并希望了解如何操作或工具(最好免费)。随意指出我做错的任何缺失的步骤或事情。

编辑:我将列出用于解决每个阶段的工具

  1. 查看源代码管理(perforce)的所有代码
  2. 构建调试和版本。发行版需要web.config中的不同连接字符串。 (MSBUILD)
  3. 运行所有单元测试
  4. 对于每个页面(aspx),将所有引用的JS文件和内联代码组合到一个文件中。与css相同
  5. 缩小所说的JS和CSS文件。
  6. 备份实时数据库架构和数据
  7. 将数据库架构更改部署到实时服务器
  8. 将所有新文件或已更改的文件上传到服务器。
  9. 将所有代码和我的源代码管理存储库备份到外部驱动器,并可能在线。
  10. 我很幸运,我的网站在凌晨1点到4点之间没有任何访问者,所以这一切都可以在不需要登台服务器的情况下完成吗?

    我知道我的问题很长,但这可能会对很多人有所帮助。

2 个答案:

答案 0 :(得分:2)

MSBuild(或可能是任何其他构建技术)可能是您自动完成所有这些任务的最佳选择。

您可以使用MSBuild执行1到4,没有任何问题。我们update our web configs with MSBuild using an XMLUpdate task,我们还运行了一些awk脚本来使用Exec task来增加我们生成的代码。

对于#5和#6,您可能再次使用Exec来执行一些脚本来获取备份文件并对生产实例运行它们,但是我不是SQL管理员所以我不知道是否这是最好的方法,或者已经有MSBuild任务。

对于实际的文件复制,有Copy任务,可能还有其他任务,但您可能需要使用xcopy或自定义脚本。

管理产品的构建是一项艰巨的任务,但这正是创建MSBuild和Ant等技术的确切原因。

答案 1 :(得分:0)

我在生产服务器上尝试了以下部署,使用NAnt来处理逻辑:

1)检查具有版本号的最新版本的文件夹。

如果有更新版本:

2)使用已编译的网站和数据库脚本获取文件(见下文)。

3)使网站脱机(添加app_offline.htm)。

4)应用数据库脚本(见下文)。

5)将网站置于在线状态(删除app_offline.htm)。


关于部署对数据库架构的更改,我受到some posts by K. Scott Allen的启发。这些的简短版本是:

1)对数据库模式(表,索引,种子数据)的每个新更改编写脚本,并将每个新更改存储在单独的文件中(例如schema-001.0001.sqlschema-001.0002.sql等)。将这些文件保存在单独的文件夹中,例如sql\schema

2)脚本misc。对象(存储过程,函数,触发器和视图)在单独的文件夹中的单独文件中,例如, sql\procedures\uspGetProducts.sqlsql\procedures\uspUpdateProduct.sqlsql\functions\sql\triggers\sql\views\

3)部署时:a)丢弃所有misc。第2部分中的对象,b)应用第1部分中尚未经过应用的模式更改,c)最后重新创建所有misc。第2部分中的对象。

这些脚本可以通过以下方式自动部署:生产服务器上的Nant脚本。