演练:定义自定义的工作流以从 Team Foundation Build 部署数据库

更新:2010 年 7 月

您必须先定义一个为部署数据库进行配置的自定义工作流,然后才能使用 Team Foundation Build 部署数据库项目。 您必须先定义一个自定义工作流,然后才能在生成定义中使用该工作流定义。 可使用 Windows Workflow 4.0 定义工作流。 您不必是专家也可遵循此简单过程进行操作。

若要完成本演练,您必须完成以下任务:

  1. 创建生成过程模板

  2. 自定义新模板

  3. 将模板签入到版本控制

所需权限

若要执行下列过程,必须将**“编辑生成定义”权限设置为“允许”**。 有关更多信息,请参见 Team Foundation Server 权限

创建生成过程模板

创建生成过程模板的最简单方法是复制默认模板。 您可以在创建生成定义时执行此操作。 通常,您会完成生成定义。 因为本演练重点介绍自定义生成过程模板,所以本演练将不涉及定义新生成的其他详细信息。 有关如何为数据库项目定义生成的更多信息,请参见如何:使用 Team Foundation Build 部署更改

创建自定义模板

  1. 在**“团队资源管理器”**中,单击要在其中创建自定义工作流的团队项目。

  2. 在**“生成”菜单上,单击“新建生成定义”**。

  3. 单击**“进程”**选项卡查看下图。

    新生成定义的“进程”选项卡

  4. 单击**“显示详细信息”,然后单击“新建”**。

    随即出现**“新的生成过程模板”**对话框。

  5. 单击**“复制现有 XAML 文件”**。

  6. 在**“新文件名”中,指定自定义工作流的名称,然后单击“确定”**。

    提示

    如果要重复使用现有 XAML 文件,可单击“选择现有 XAML 文件”,然后在您的版本控制服务器上指定该文件的路径。

  7. 在生成定义窗口中的**“生成过程文件”**菜单下,单击包含您的模板的名称的超链接。

    源代码管理资源管理器中随即出现包含新模板的文件夹。

  8. 在**“文件夹”窗格中右击包含新模板的文件夹,然后单击“获取最新版本”**。

  9. 右击新模板,然后单击**“签出以进行编辑”**。

    将出现**“签出”**对话框。

  10. 单击**“签出”**。

  11. 右击新模板,然后单击**“视图”**。

    随即显示**“Visual Studio Windows 工作流设计器”**。

    有关更多信息,请参见下列主题之一:

自定义新模板

您必须将一个序列添加到默认模板,才能将部署步骤添加到生成过程的结尾。 可以使用**“Windows 工作流设计器”**来自定义 XAML 文件。 即使您以前未使用过此设计器,下面过程中的步骤也不算特别复杂。 简言之,如果您的生成成功且测试未失败,则可以将一个序列添加到工作流中,然后在工作流中使用 VSDBCMD.EXE 部署数据库。

此序列包含单个 If 活动,如果您的生成成功且测试通过,或者无任何测试,则该活动将部署您的数据库。 为了使此定义更易于遵循,此节划分成了以下四个过程:

  1. 将数据库部署序列添加到工作流

  2. 添加 If 活动

  3. 定义 Then Deploy 块

  4. 定义 Else Skip Deployment 块

将数据库部署序列添加到工作流

  1. 在**“Windows 工作流设计器”中单击“全部折叠”**。

    将显示下图。

    初始部署工作流

  2. 打开**“工具箱”,展开“控制流”部分,然后将“序列”活动拖动到设计器上“为 CheckInShelveset 生成任务签入封闭更改”**下的箭头上方。 当您将鼠标悬停在该箭头上方时,将出现第二个箭头。

  3. 在这两个箭头之间放置此活动,如下图所示。

    放置新序列后的工作流

  4. 右击所添加的序列,然后单击**“属性”**。

    将出现**“属性”**窗口。

  5. 设置**“DisplayName”**属性以部署数据库。

  6. 在**“部署数据库”序列中,双击“双击以查看”**。

    设计器将放大**“部署数据库”**序列,如下图所示。

    展开部署序列后的工作流

    在设计器顶部有一个导航通道,如下图所示。

    Windows 工作流设计器中的导航通道

接下来,将**“If”**活动添加到部署序列中。

添加 If 活动

  1. 打开**“工具箱”,展开“控制流”部分,并将“If”活动拖动到“在此处放置活动”**上。

    一个警告图标将显示在**“部署数据库”序列和“If”活动上,因为您还未配置“If”**活动,如下图所示。

    添加 If 活动后的工作流

  2. 右击所添加的活动,然后单击**“属性”**。

    将出现**“属性”**窗口。

  3. 将**“If”活动的“DisplayName”**属性设置为“如果生成和测试成功”。

  4. 双击**“If”活动中的“双击以查看”**。

  5. 在**“条件”**中,键入以下条件。

    BuildDetail.CompilationStatus = BuildPhaseStatus.Succeeded And (BuildDetail.TestStatus = BuildPhaseStatus.Succeeded Or BuildDetail.TestStatus = BuildPhaseStatus.Unknown)
    

    此条件测试生成是否成功,以及测试是否成功或者无任何测试运行。

**“如果生成和测试成功”**活动类似于下图。

展开 If 活动后的工作流

接下来,将**“InvokeProcess”活动添加到“If”活动的“Then”**部分。

定义 Then Deploy 块

  1. 打开**“工具箱”,在“Team Foundation Build 活动”部分中找到“InvokeProcess”活动,并将其拖动到“Then”子句中的“在此处放置活动”**上。

    一个警告图标将显示在**“如果生成和测试成功”活动和“InvokeProcess”活动上,因为您还未配置“InvokeProcess”**活动。

  2. 双击**“调用 VSDBCMD”活动中的“双击以查看”**。

    该活动如下所示。

    定义 Then 子句时的工作流

  3. 通过执行以下子任务来设置**“InvokeProcess”**活动的属性:

    1. 右击所添加的活动,然后单击**“属性”**。

      将出现**“属性”**窗口。

    2. 将**“InvokeProcess”活动的“DisplayName”**属性设置为“调用 VSDBCMD”。

    3. 将**“Arguments”**属性设置为 "/a:Deploy /dd+ /dsp:Sql /manifest:DatabaseProjectName.deploymanifest"。 必须将 DatabaseProjectName 替换为要部署的数据库项目的名称。

    4. 将**“FileName”**属性设置为 VSDBCMD.EXE 在您的生成服务器上的路径。 例如,如果在您的生成计算机上安装了 Visual Studio,则可以指定 C:\Program Files\Microsoft Visual Studio 10.0\VSTSDB\Deploy\VSDBCMD.EXE;如果只是将 Deploy 文件夹复制到您的生成计算机,则可以指定 C:\Deploy\VSDBCMD.EXE。

      重要说明重要事项

      若要使用 VSDBCMD.EXE 部署数据库,Deploy 文件夹的内容必须位于您的生成计算机上。 有关更多信息,请参见如何:准备数据库以使用 VSDBCMD.EXE 从命令提示符处进行部署

    5. 将**“WorkingDirectory”**属性设置为“BuildDetail.DropLocation”。

  4. 打开**“工具箱”,在“Team Foundation Build 活动”部分中找到“WriteBuildMessage”活动,并将其拖动到“处理标准输出”部分的“在此处放置活动”**上。

    一个警告图标将显示在**“调用 VSDBCMD”活动和“WriteBuildMessage”活动上,因为您还未配置“WriteBuildMessage”**活动。

  5. 通过执行以下子任务来设置**“WriteBuildMessage”**活动的属性:

    1. 右击所添加的活动,然后单击**“属性”**。

      将出现**“属性”**窗口。

    2. 将**“WriteBuildMessage”活动的“DisplayName”**属性设置为“VSDBCMD 输出”。

    3. 将**“Importance”**属性设置为 Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High。

    4. 将**“Message”**属性设置为“stdOutput”。

  6. 打开**“工具箱”,在“Team Foundation Build 活动”部分中找到“WriteBuildError”活动,并将其拖动到“处理错误输出”部分的“在此处放置活动”**上。

    一个警告图标将显示在**“调用 VSDBCMD”活动和“WriteBuildError”活动上,因为您还未配置“WriteBuildError”**活动。

  7. 通过执行以下子任务来设置**“WriteBuildError”**活动的属性:

    1. 右击所添加的活动,然后单击**“属性”**。

      将出现**“属性”**窗口。

    2. 将**“WriteBuildError”活动的“DisplayName”**属性设置为“VSDBCMD 错误”。

    3. 将**“Message”**属性设置为“errOutput”。

    4. 在设计器顶部的通道中,单击**“如果生成和测试成功”**。

      执行此操作后,工作流将缩小一个级别。

此时,工作流如下图所示。

完成 Then 子句后的工作流

接下来,定义**“Else”**活动的详细信息。

定义 Else Skip Deployment 块

  1. 打开**“工具箱”,在“Team Foundation Build 活动”部分中找到“WriteBuildWarning”活动,并将其拖动到“Else”子句中的“在此处放置活动”**上。

    一个警告图标将显示在**“如果生成和测试成功”活动和“WriteBuildWarning”活动上,因为您还未配置“WriteBuildWarning”**活动。

  2. 将**“WriteBuildWarning”活动的“DisplayName”**属性设置为“已跳过部署”。

  3. 将**“Message”**属性设置为“已跳过数据库部署”。

    警告图标将不再显示,因为您已配置了所添加的工作流活动。

现在**“If”**活动应如下图所示。

完成数据库部署工作流

您已更新生成工作流,可以部署指定的数据库项目了。 现在,您必须将模板签入到版本控制,这样才能在生成过程中使用该模板。

将模板签入到版本控制

您必须先将工作流签入到版本控制中,然后才能在生成定义中使用它。 您还可以利用版本控制的功能,如分支。 可以在分支项目的同时分支工作流。

  1. 保存您的工作流并关闭设计器。

  2. 在**“源代码管理资源管理器”中,右击您的新模板,然后单击“签入挂起的更改”**。

    此时将出现**“签入”**对话框。

  3. (可选)您可以指定关于更改的签入注释或其他信息。 有关更多信息,请参见下列主题:

  4. 单击**“签入”**。

现在,可以定义一个使用您在本演练中生成的自定义工作流的生成。 有关更多信息,请参见如何:使用 Team Foundation Build 部署更改

后续步骤

现在应测试您自定义的模板。 有关更多信息,请参见如何:使用 Team Foundation Build 部署更改

请参见

任务

如何:准备数据库以使用 VSDBCMD.EXE 从命令提示符处进行部署

如何:将更改部署到新数据库或现有数据库

概念

数据库生成和部署概述

修订记录

日期

修订记录

原因

2010 年 7 月

添加了此主题,演示如何使用 Team Foundation Build 创建自定义工作流来部署数据库。

信息补充。