所以我有一个我正在开发的ASP.NET MVC网站,从来没有一个像样的部署策略,因此进行更改,特别是数据库方案可能涉及很多步骤和时间。
以下是我正在寻找的步骤,并希望了解如何操作或工具(最好免费)。随意指出我做错的任何缺失的步骤或事情。
编辑:我将列出用于解决每个阶段的工具
我很幸运,我的网站在凌晨1点到4点之间没有任何访问者,所以这一切都可以在不需要登台服务器的情况下完成吗?
我知道我的问题很长,但这可能会对很多人有所帮助。
答案 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.sql
,schema-001.0002.sql
等)。将这些文件保存在单独的文件夹中,例如sql\schema
。
2)脚本misc。对象(存储过程,函数,触发器和视图)在单独的文件夹中的单独文件中,例如, sql\procedures\uspGetProducts.sql
,sql\procedures\uspUpdateProduct.sql
,sql\functions\
,sql\triggers\
,sql\views\
3)部署时:a)丢弃所有misc。第2部分中的对象,b)应用第1部分中尚未经过应用的模式更改,c)最后重新创建所有misc。第2部分中的对象。
这些脚本可以通过以下方式自动部署:生产服务器上的Nant脚本。