2009-08-31 57 views
9

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

以下是我正在寻找待办事项的步骤,并希望提供关于如何使用它或工具(最好是免费)的建议。随意指出我错误的步骤或事情。

编辑:我会列出我已经用来解决每个阶段

  1. 退房从源头控制(Perforce公司)
  2. 构建调试和relese版本的所有代码的工具。发布版本需要web.config中的不同连接字符串。 (MSBUILD)
  3. 运行所有单元测试
  4. 对于每个页面(aspx)将所有引用的JS文件和内联代码组合到一个文件中。与css相同
  5. Minify表示JS和CSS文件。
  6. 备份活动数据库架构和数据
  7. 部署数据库架构更改住服务器
  8. 上传新的或已更改为服务器的所有文件。
  9. 将所有代码和我的源代码控制存储库备份到外部驱动器,并可能在线。

我很幸运,我的网站在1am到4pm之间没有任何访问者,所以所有这些都可以在不需要登台服务器等的情况下完成。

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

回答

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等技术的确切原因。

0

我曾尝试在生产服务器上部署下,采用恶性处理逻辑:

1)检查与最新版本构建版本号的文件夹。

如果有新版本可用:

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

3)使网站离线(添加app_offline.htm)。

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

5)将网站在线(删除app_offline.htm)。


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

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

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

3)当部署:1)删除所有杂项。来自第2部分的对象,b)应用先前未应用的来自第1部分的模式更改,c)并最终重新创建所有混杂。来自第2部分的对象。

这些脚本可以通过例如自动部署。生产服务器上的Nant脚本。