65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Team Foundation Build Server 部署 Web 应用程序 – 第 2 部分(数据库部署)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.10/5 (3投票s)

2014 年 7 月 30 日

CPOL

11分钟阅读

viewsIcon

24610

downloadIcon

108

学习如何使用 Team Foundation Server 部署数据库架构。

路线图

  1. 使用 TFS 部署 Web 应用程序
  2. 使用 TFS 部署数据库
  3. Web.config 转换

引言

在上篇文章中,我们学习了如何安装和配置 Team Foundation Application ServerBuild 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 的服务器。

Dev Test Environment

Content

  1. 示例数据库

  2. 数据库项目生成/部署先决条件安装

  3. 创建新的数据库项目

    1. 导入数据库架构

    2. 创建发布配置文件

  4. 更新生成定义以生成和部署数据库项目

  5. 随 Web 应用程序一起部署数据库项目

    1. 检查已部署的数据库架构

  6. 部署已发布数据库的修改后的数据库架构

    1. 检查已部署的更新数据库架构

示例数据库

在我们的演示中,我创建了一个名为 DBTEST 的简单数据库,包含

2 个表

Country 表

Table Country

City 表

Table City

1 个视图:CountryCity

View 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 应用程序部署的先决条件一样,我们再次有两个选择

  1. 安装带有 SQL Server Data Tools 的 Visual Studio

或者

  1. 下载并安装 SSDThttp://go.microsoft.com/fwlink/?LinkID=393520
    要获取更多信息,请访问:http://msdn.microsoft.com/en-us/jj650015

创建新的数据库项目

我将在上一篇文章中创建的解决方案(TFSTest)中创建一个数据库项目,这样我们就可以将 Web 应用程序和数据库架构项目都放在一个地方 – 一个解决方案中。

  1. Solution Explorer 选项卡中,右键单击你的解决方案名称,选择 Add,然后单击 New Project...
    Add New Project

  2. 会打开 Add New Project 对话框 – 展开 Other Languages,单击 SQL Server,单击 SQL Server Database Project为该项目输入一个名称,然后单击 OK
    Create Database Project
    注意:如果您使用的是 Visual Studio 2010,您可以在此处找到数据库项目:DatabaseSQL ServerSQL Server 2008 Database Project

数据库项目 DBTest 已创建。由于我们连接到了 TFS 源代码管理,因此数据库项目会自动添加到源代码管理中,并且解决方案被标记为已修改。
Database Project Added to Source Control

导入数据库架构

现在,我们将数据库架构(从开发 SQL Server)导入到我们创建的数据库项目中。

  1. Solution Explorer 选项卡中,右键单击数据库项目名称,选择 Import,然后单击 Database...
    Import Database

  2. 会打开 Import Database 向导 – 如果您的数据库未列在 Source database connection 的下拉列表中,请单击 New Connection...
    New Database Connection

  3. 会打开 Connection Properties 对话框 – 在 Server name 中输入开发 SQL Server 的名称(或IP 地址),选择身份验证类型,选择要连接的数据库,然后单击 OK

    刚刚创建的连接被设置为 Source Database Connection – 其格式为 <sql_server_name>.<database_name> (<user>)。

  4. Import Settings 部分,选择最适合您需求的设置,然后单击 Start
    Import referenced logins – 导入映射到所选数据库的所有用户登录名
    Import permissions – 导入授予用户的权限导入数据库设置

  5. 导入完成后,单击 Finish – 数据库架构已添加到我们的数据库项目中,并且也已添加到TFS 源代码管理中。
    Database Schema Imported

创建发布配置文件

为了告知 Build Service 如何以及在哪里部署数据库,我们必须创建一个包含这些信息的发布配置文件

  1. Solution Explorer 选项卡中,右键单击数据库项目名称(在我们的例子中是 DBTest),然后单击 Publish...
    Publish Click

  2. 会打开 Publish Database 对话框 – 单击 Target Database Connection 旁边的 Edit... 以创建到目标数据库服务器的连接(在我们的例子中,它与安装 TFS 的服务器相同 – TFSSERVER

  3. 会打开 Connection Properties 对话框 – 在 Server name 中输入测试 SQL Server 的名称(或IP 地址),选择身份验证类型,输入数据库名称(或保持原样 – 将是已部署数据库的名称),然后单击 OK
    Target Database Connection Properties
    注意:如果我们使用Windows Authentication,那么 Build Service 运行的帐户(在我们的例子中是 NT AUTHORITY/System)将尝试连接到 SQL Server 并创建我们的数据库。因此,它必须在 SQL Server 中拥有相应的权限。可能您不需要做任何事情,因为在配置 Build Service 时已为该帐户设置了权限。

    刚刚创建的连接在 Publish Database 对话框中被设置为 Target Database Connection

  4. 当您在 Publish Database 对话框中单击 Advanced... 时,您可以看到许多可以配置的选项 – 这些选项可能因目标环境而异。您可以为要部署的每个环境创建具有不同设置的单独发布配置文件。接受默认设置对我们来说是可以的。

  5. Publish Database 对话框中单击 Create Profile
    Create Publish Profile

    发布配置文件已创建,作为 xml 文件添加到数据库项目(DBTest)中,并添加到TFS 源代码管理中。
    Publish Profile Created

  6. Publish Database 对话框中单击 Cancel

  7. 签入解决方案 – 右键单击你的解决方案名称,单击 Check In...,输入一个签入注释,单击 Check In 按钮,并通过单击 Yes 确认 Check-In Confirmation dialog

注意:要签入解决方案,您当然必须连接到 Team Foundation Server。如果您不知道如何操作,请查看本系列的第一个文章 此处

更新生成定义以生成和部署数据库项目

现在,我们必须修改生成定义中的 MSBuild Arguments,以告知 Build Service 生成和部署我们的数据库项目。

  1. Team Explorer 选项卡中,单击 Builds,右键单击生成定义名称(在我们的例子中,如上一篇文章所示,是 TFSTest),然后选择 Edit Build Definition...

  2. Build Definition 中,选择 Process 并展开 Advanced,以便您可以修改 MSBuild Arguments

    注意:有关如何创建/修改生成定义,您也可以在本系列的第一个文章 此处 中找到。


    为了部署数据库项目,我们只需要添加 3 个新参数

    /p:SqlPublishProfilePath=DBTest.publish.xml /t:Build /t:Publish

    SqlPublishProfilePath – 指示在部署数据库项目时使用哪个发布配置文件

    Build, Publish – 不言自明
     
  3. 将以上 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 个参数就足够了。
     
  4. 保存修改后的生成定义

随 Web 应用程序一起部署数据库项目

  1. 右键单击 build definition name ,然后选择 Queue New Build...
  2. 会打开 Queue Build 对话框 – 接受默认设置,然后单击 Queue
  3. Team Explorer 中,您可以看到新的生成已排队 – 双击它,将打开一个对话框以查看生成进度和结果。
  4. 正如我们在生成进度对话框中看到的,生成成功了。

检查已部署的数据库架构

  1. 连接到 SQL Server,您刚刚在此处部署了数据库,例如使用 Microsoft SQL Server Management Studio(在我们的例子中,它与安装 TFS 的同一台机器相同)。

  2. 展开 DatabasesDBTest 数据库,然后展开 TablesViews,这样我们就可以看到我们开发数据库中的所有现有对象(2 个表,1 个视图)是否已在测试环境中创建(如我们在本文开头所称呼的)。
    Database Schema Deployed
     
  3. 如果您在将数据库架构导入 Visual Studio 数据库项目时勾选了Import settings 中的 Import referenced loginsImport permissions,那么映射到 DBTEST 数据库的所有用户也已导入,并带有它们的登录名和权限 – 首先展开数据库服务器的 Security(而不是 DBTEST 的 Security),然后展开 Logins 以查看从开发环境迁移到测试环境的登录名。
    Database Server Logins Deployed

    注意:在将登录名导入数据库项目时,如您在 Visual StudioSolution ExplorerDBTest 项目 – Security打开 <login_name>_1.sql 中所见,为所有登录名创建了一个新密码。
    SQL Login in DB Project

    并且您会看到创建登录名的脚本
    SQL Login New Password

    所以现在,如果您想使用此登录名连接到 SQL Server,只需复制新生成的密码,或者以系统管理员(或安全管理员)身份登录,然后更改登录名的密码。
     
  4. 现在,如果您在数据库 DBTEST 下展开 SecurityUsers,您可以看到用户也已被创建(登录名已映射到此数据库)。
    Database Users Deployed
     
  5. 您可以在生成定义创建时指定的生成文件夹中找到 Build Service 生成的数据库项目包(请参阅上一篇文章 此处)。
    在安装了指定共享生成文件夹的服务器上打开Windows Explorer(在我们的例子中仍然是同一台机器),找到 Drops 文件夹 – 在其中,您可以找到用于部署数据库架构的SQL 脚本 (.sql)
    Database Deployment Script

部署已发布数据库的修改后的数据库架构

首先,我们将向测试环境中的数据库插入一些数据,以模拟 Web 应用程序测试,并查看数据在部署修改后的数据库架构后是否保持不变 – 这当然取决于您在创建发布配置文件时所做的设置。然后,我们将修改开发环境中的数据库架构,例如通过向其中一个表添加列。

  1. 转到测试环境,向 DBTEST 中的表(CountryCity)插入一些数据(您可以使用本文顶部可下载的准备好的脚本)。

  2. 转到开发环境,并向 Country 表添加一列 – 您可以使用此脚本
    ALTER TABLE COUNTRY ADD TESTCOL INT

  3. 比较架构 – 开发环境中的修改后的数据库架构与导入到 Visual Studio 数据库项目中的架构。

  4. 转到 Visual Studio,右键单击数据库项目 DBTest 的名称,然后选择 Schema Compare...
    Database Schema Compare

  5. 会打开 Schema Compare 窗口 – 左侧是源架构,右侧是目标架构 – 我们的数据库项目架构默认设置在左侧,这不好,因为我们要更新我们的项目架构,所以我们需要将其设置为目标 – 单击中间的切换按钮
    Switch Target and Source

  6. 选择源(左侧)– 要么从下拉列表中选择一个连接(到开发环境),要么通过从同一个下拉列表中选择 Select source...创建新连接
    Select Source Database

  7. 选择或创建到开发环境的连接后,单击 Compare
    Compare Databases Click

  8. SqlSchemaCompare 窗口中,您可以看到两个架构之间的差异。
    Schemas Differencies

  9. 单击 Update,然后单击 Yes(以确认操作),以更新我们的数据库项目架构。
    Update Database Project Schema

  10. 用于创建 Country 表的 SQL 脚本已从源代码管理中自动签出,并通过添加新列 TESTCOL 进行了修改
    Country Table Script Updated

  11. 签入解决方案 – 右键单击你的解决方案名称,单击 Check In...,输入一个签入注释,单击 Check In 按钮,并通过单击 Yes 确认 Check-In Confirmation dialog

  12. 触发手动生成 – 在 Team Explorer 选项卡中,单击 Builds,右键单击生成定义名称,然后选择Queue New Build...。会打开 Queue Build 对话框 – 接受默认设置,然后单击 Queue

  13. Team Explorer 中,您可以看到新的生成已排队 – 双击它,将打开一个对话框以查看生成进度和结果。

  14. 正如我们在生成进度对话框中看到的,生成成功了。

检查已部署的更新数据库架构

  1. 连接到 SQL Server,您刚刚在此处部署了更新的数据库架构。

  2. 展开 DatabasesDBTest 数据库,TablesCountry 表,Columns – 这样我们就可以看到是否存在新列 TESTCOL
    New Column Added to Test DB

  3. 检查 Drops 文件夹以获取用于部署更新数据库架构的SQL 脚本 (.sql) – 如您所见(打开它时),Build Service 比较了架构,并仅创建了包含差异的脚本 – 在我们的例子中,是将列 TESTCOL 添加到 Country 表。
    Database Deploy Script

注意:当您将数据库架构与 Web 应用程序一起部署时,重要的是要知道,如果 Web 应用程序生成(使用 Build Service)出现错误,则什么都不会被部署 – Web 应用程序和数据库架构都不会。

结论

与 Web 应用程序部署不同,使用 Team Foundation Server 进行数据库部署非常简单明了。由于 Visual Studio 中的工具,重新部署修改后的数据库架构也很容易。如果您有任何问题或发现缺少任何重要信息,请随时回馈。

在下一部分,我们将讨论 Web.config 转换。

历史

2014 年 7 月 30 日 - 初始版本

© . All rights reserved.