使用 Team Foundation Build Server 部署 Web 应用程序 – 第 2 部分(数据库部署)
学习如何使用 Team Foundation Server 部署数据库架构。
路线图
- 使用 TFS 部署 Web 应用程序
- 使用 TFS 部署数据库
- Web.config 转换
引言
在上篇文章中,我们学习了如何安装和配置 Team Foundation Application Server、Build Service,如何创建 Team Project,将源代码添加到源代码管理,如何使用合适的 Build Arguments 为我们的需求创建 Build Definition,以及最后如何自动生成和部署 Web 应用程序。
在本文中,我们将继续进行 数据库部署。同样,我们将把数据库部署到 TFS 安装所在的同一台机器上。
使用的产品:Windows Server 2008 R2、SQL Server 2008 R2、Team Foundation Server 2010、Visual Studio 2012。
背景
让我们设想一下,我们有一台装有 Visual Studio 的开发机器,我们在上面开发我们的 Web 应用程序。此外,我们还有一台装有 SQL Server 的开发服务器,我们的 Web 应用程序使用该服务器作为数据存储。Web 应用程序根据用户交互连接到 SQL Server,并在特定数据库中选择、插入和更新数据。
我们的目标是自动部署此数据库以及我们的 Web 应用程序到例如测试环境 – 在我们的例子中,就是安装了 TFS 和 SQL Server 的服务器。
Content
示例数据库
在我们的演示中,我创建了一个名为 DBTEST 的简单数据库,包含
2 个表
Country 表
City 表
1 个视图:CountryCity
两个表都有一个名为 ID 的标识列,它也是主键(聚集索引)。City 表还有一个名为 COUNTRY_ID 的外键列,它引用 Country 表中的 ID 列(主键)。
注意:我不会解释如何创建数据库及其对象(这超出了本教程的范围),但对于那些想完全按照这个演示进行操作的人,我已经准备了创建上述 DB 对象和插入一些示例数据的脚本。
数据库项目生成/部署先决条件安装
为了能够使用 Team Build Service 生成和发布 SQL Server Data Tools Projects (*.sqlproj),你必须在安装了 Build Service 的计算机上安装 SQL Server Data Tools (SSDT)。就像在前一篇文章中安装 Web 应用程序部署的先决条件一样,我们再次有两个选择
-
安装带有 SQL Server Data Tools 的 Visual Studio
或者
- 下载并安装 SSDT:http://go.microsoft.com/fwlink/?LinkID=393520
要获取更多信息,请访问:http://msdn.microsoft.com/en-us/jj650015
创建新的数据库项目
我将在上一篇文章中创建的解决方案(TFSTest)中创建一个数据库项目,这样我们就可以将 Web 应用程序和数据库架构项目都放在一个地方 – 一个解决方案中。
-
在 Solution Explorer 选项卡中,右键单击你的解决方案名称,选择 Add,然后单击 New Project...
-
会打开 Add New Project 对话框 – 展开 Other Languages,单击 SQL Server,单击 SQL Server Database Project,为该项目输入一个名称,然后单击 OK
注意:如果您使用的是 Visual Studio 2010,您可以在此处找到数据库项目:Database – SQL Server – SQL Server 2008 Database Project。
数据库项目 DBTest 已创建。由于我们连接到了 TFS 源代码管理,因此数据库项目会自动添加到源代码管理中,并且解决方案被标记为已修改。
导入数据库架构
现在,我们将数据库架构(从开发 SQL Server)导入到我们创建的数据库项目中。
-
在 Solution Explorer 选项卡中,右键单击数据库项目名称,选择 Import,然后单击 Database...
-
会打开 Import Database 向导 – 如果您的数据库未列在 Source database connection 的下拉列表中,请单击 New Connection...
-
会打开 Connection Properties 对话框 – 在 Server name 中输入开发 SQL Server 的名称(或IP 地址),选择身份验证类型,选择要连接的数据库,然后单击 OK
刚刚创建的连接被设置为 Source Database Connection – 其格式为 <sql_server_name>.<database_name> (<user>)。 -
在 Import Settings 部分,选择最适合您需求的设置,然后单击 Start
Import referenced logins – 导入映射到所选数据库的所有用户登录名
Import permissions – 导入授予用户的权限 - 导入完成后,单击 Finish – 数据库架构已添加到我们的数据库项目中,并且也已添加到TFS 源代码管理中。
创建发布配置文件
为了告知 Build Service 如何以及在哪里部署数据库,我们必须创建一个包含这些信息的发布配置文件。
-
在 Solution Explorer 选项卡中,右键单击数据库项目名称(在我们的例子中是 DBTest),然后单击 Publish...
-
会打开 Publish Database 对话框 – 单击 Target Database Connection 旁边的 Edit... 以创建到目标数据库服务器的连接(在我们的例子中,它与安装 TFS 的服务器相同 – TFSSERVER)
-
会打开 Connection Properties 对话框 – 在 Server name 中输入测试 SQL Server 的名称(或IP 地址),选择身份验证类型,输入数据库名称(或保持原样 – 将是已部署数据库的名称),然后单击 OK
注意:如果我们使用Windows Authentication,那么 Build Service 运行的帐户(在我们的例子中是 NT AUTHORITY/System)将尝试连接到 SQL Server 并创建我们的数据库。因此,它必须在 SQL Server 中拥有相应的权限。可能您不需要做任何事情,因为在配置 Build Service 时已为该帐户设置了权限。
刚刚创建的连接在 Publish Database 对话框中被设置为 Target Database Connection。 -
当您在 Publish Database 对话框中单击 Advanced... 时,您可以看到许多可以配置的选项 – 这些选项可能因目标环境而异。您可以为要部署的每个环境创建具有不同设置的单独发布配置文件。接受默认设置对我们来说是可以的。
-
在 Publish Database 对话框中单击 Create Profile
发布配置文件已创建,作为 xml 文件添加到数据库项目(DBTest)中,并添加到TFS 源代码管理中。
-
在 Publish Database 对话框中单击 Cancel
- 签入解决方案 – 右键单击你的解决方案名称,单击 Check In...,输入一个签入注释,单击 Check In 按钮,并通过单击 Yes 确认 Check-In Confirmation dialog
注意:要签入解决方案,您当然必须连接到 Team Foundation Server。如果您不知道如何操作,请查看本系列的第一个文章 此处。
更新生成定义以生成和部署数据库项目
现在,我们必须修改生成定义中的 MSBuild Arguments,以告知 Build Service 生成和部署我们的数据库项目。
-
在 Team Explorer 选项卡中,单击 Builds,右键单击生成定义名称(在我们的例子中,如上一篇文章所示,是 TFSTest),然后选择 Edit Build Definition...
- 在 Build Definition 中,选择 Process 并展开 Advanced,以便您可以修改 MSBuild Arguments
注意:有关如何创建/修改生成定义,您也可以在本系列的第一个文章 此处 中找到。
为了部署数据库项目,我们只需要添加 3 个新参数/p:SqlPublishProfilePath=DBTest.publish.xml /t:Build /t:Publish
SqlPublishProfilePath – 指示在部署数据库项目时使用哪个发布配置文件
Build, Publish – 不言自明
- 将以上 3 个参数添加到 MSBuild Arguments – 然后它看起来像这样
/p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:CreatePackageOnPublish=True
/p:MSDeployPublishMethod=InProc /p:MsDeployServiceUrl=localhost
/p:DeployIisAppPath="Default Web Site/TFSTest" /p:VisualStudioVersion=11.0
/p:UserName= /p:SqlPublishProfilePath=DBTest.publish.xml /t:Build /t:Publish
注意: 由于我们希望与 Web 应用程序项目一起部署数据库项目,因此我们需要所有这些参数在 MSBuild Arguments 中指定。如果您只想部署数据库项目,那么上面提到的 3 个参数就足够了。
- 保存修改后的生成定义
随 Web 应用程序一起部署数据库项目
- 右键单击 build definition name ,然后选择 Queue New Build...
- 会打开 Queue Build 对话框 – 接受默认设置,然后单击 Queue
- 在 Team Explorer 中,您可以看到新的生成已排队 – 双击它,将打开一个对话框以查看生成进度和结果。
- 正如我们在生成进度对话框中看到的,生成成功了。
检查已部署的数据库架构
-
连接到 SQL Server,您刚刚在此处部署了数据库,例如使用 Microsoft SQL Server Management Studio(在我们的例子中,它与安装 TFS 的同一台机器相同)。
- 展开 Databases,DBTest 数据库,然后展开 Tables 和 Views,这样我们就可以看到我们开发数据库中的所有现有对象(2 个表,1 个视图)是否已在测试环境中创建(如我们在本文开头所称呼的)。
- 如果您在将数据库架构导入 Visual Studio 数据库项目时勾选了Import settings 中的 Import referenced logins 和 Import permissions,那么映射到 DBTEST 数据库的所有用户也已导入,并带有它们的登录名和权限 – 首先展开数据库服务器的 Security(而不是 DBTEST 的 Security),然后展开 Logins 以查看从开发环境迁移到测试环境的登录名。
注意:在将登录名导入数据库项目时,如您在 Visual Studio – Solution Explorer – DBTest 项目 – Security – 打开 <login_name>_1.sql 中所见,为所有登录名创建了一个新密码。
并且您会看到创建登录名的脚本
所以现在,如果您想使用此登录名连接到 SQL Server,只需复制新生成的密码,或者以系统管理员(或安全管理员)身份登录,然后更改登录名的密码。
- 现在,如果您在数据库 DBTEST 下展开 Security – Users,您可以看到用户也已被创建(登录名已映射到此数据库)。
- 您可以在生成定义创建时指定的生成文件夹中找到 Build Service 生成的数据库项目包(请参阅上一篇文章 此处)。
在安装了指定共享生成文件夹的服务器上打开Windows Explorer(在我们的例子中仍然是同一台机器),找到 Drops 文件夹 – 在其中,您可以找到用于部署数据库架构的SQL 脚本 (.sql)。
部署已发布数据库的修改后的数据库架构
首先,我们将向测试环境中的数据库插入一些数据,以模拟 Web 应用程序测试,并查看数据在部署修改后的数据库架构后是否保持不变 – 这当然取决于您在创建发布配置文件时所做的设置。然后,我们将修改开发环境中的数据库架构,例如通过向其中一个表添加列。
-
转到测试环境,向 DBTEST 中的表(Country、City)插入一些数据(您可以使用本文顶部可下载的准备好的脚本)。
-
转到开发环境,并向 Country 表添加一列 – 您可以使用此脚本
ALTER TABLE COUNTRY ADD TESTCOL INT -
比较架构 – 开发环境中的修改后的数据库架构与导入到 Visual Studio 数据库项目中的架构。
-
转到 Visual Studio,右键单击数据库项目 DBTest 的名称,然后选择 Schema Compare...
-
会打开 Schema Compare 窗口 – 左侧是源架构,右侧是目标架构 – 我们的数据库项目架构默认设置在左侧,这不好,因为我们要更新我们的项目架构,所以我们需要将其设置为目标 – 单击中间的切换按钮。
-
选择源(左侧)– 要么从下拉列表中选择一个连接(到开发环境),要么通过从同一个下拉列表中选择 Select source...创建新连接。
-
选择或创建到开发环境的连接后,单击 Compare
-
在 SqlSchemaCompare 窗口中,您可以看到两个架构之间的差异。
-
单击 Update,然后单击 Yes(以确认操作),以更新我们的数据库项目架构。
-
用于创建 Country 表的 SQL 脚本已从源代码管理中自动签出,并通过添加新列 TESTCOL 进行了修改。
-
签入解决方案 – 右键单击你的解决方案名称,单击 Check In...,输入一个签入注释,单击 Check In 按钮,并通过单击 Yes 确认 Check-In Confirmation dialog
-
触发手动生成 – 在 Team Explorer 选项卡中,单击 Builds,右键单击生成定义名称,然后选择Queue New Build...。会打开 Queue Build 对话框 – 接受默认设置,然后单击 Queue。
-
在 Team Explorer 中,您可以看到新的生成已排队 – 双击它,将打开一个对话框以查看生成进度和结果。
-
正如我们在生成进度对话框中看到的,生成成功了。
检查已部署的更新数据库架构
-
连接到 SQL Server,您刚刚在此处部署了更新的数据库架构。
-
展开 Databases,DBTest 数据库,Tables,Country 表,Columns – 这样我们就可以看到是否存在新列 TESTCOL。
-
检查 Drops 文件夹以获取用于部署更新数据库架构的SQL 脚本 (.sql) – 如您所见(打开它时),Build Service 比较了架构,并仅创建了包含差异的脚本 – 在我们的例子中,是将列 TESTCOL 添加到 Country 表。
注意:当您将数据库架构与 Web 应用程序一起部署时,重要的是要知道,如果 Web 应用程序生成(使用 Build Service)出现错误,则什么都不会被部署 – Web 应用程序和数据库架构都不会。
结论
与 Web 应用程序部署不同,使用 Team Foundation Server 进行数据库部署非常简单明了。由于 Visual Studio 中的工具,重新部署修改后的数据库架构也很容易。如果您有任何问题或发现缺少任何重要信息,请随时回馈。
在下一部分,我们将讨论 Web.config 转换。
历史
2014 年 7 月 30 日 - 初始版本