创建支持部署的生成定义

作者 :Jason Lee

如果要在 Team Foundation Server (TFS) 2010 中执行任何类型的生成,需要在团队项目中创建生成定义。 本主题介绍如何在 TFS 中创建新的生成定义,以及如何在 Team Build 中控制 Web 部署作为生成过程的一部分。

本主题是一系列教程的一部分,这些教程基于名为 Fabrikam, Inc 的虚构公司的企业部署要求。本教程系列使用示例解决方案( Contact Manager 解决方案)来表示具有实际复杂程度的 Web 应用程序,包括 ASP.NET MVC 3 应用程序、Windows Communication Foundation (WCF) 服务和数据库项目。

这些教程的核心部署方法基于了解项目文件中所述的拆分 项目文件方法,其中生成和部署过程由两个项目文件控制,一个项目文件包含适用于每个目标环境的生成说明,另一个包含特定于环境的生成和部署设置。 在生成时,特定于环境的项目文件将合并到与环境无关的项目文件中,以形成一组完整的生成说明。

任务概述

生成定义是控制 TFS 中团队项目生成的方式和时间的机制。 每个生成定义指定:

  • 要生成的项目,如 Visual Studio 解决方案文件或自定义Microsoft 生成引擎 (MSBuild) 项目文件。
  • 确定何时应进行生成的条件,例如手动触发器、持续集成 (CI) 或封闭检查。
  • 团队生成应将生成输出发送到的位置,包括 Web 包和数据库脚本等部署项目。
  • 每个生成应保留的时间量。
  • 生成过程的其他各种参数。

注意

有关生成定义的详细信息,请参阅 定义生成过程

本主题介绍如何创建使用 CI 的生成定义,以便在开发人员签入新内容时触发生成。 如果生成成功,生成服务将运行自定义项目文件,以将解决方案部署到测试环境。

触发生成时,需要执行以下操作:

  • 首先,Team Build 应生成解决方案。 在此过程中,Team Build 将调用 Web 发布管道 (WPP) ,为解决方案中的每个 Web 应用程序项目生成 Web 部署包。 团队生成还将运行与解决方案关联的任何单元测试。
  • 如果解决方案生成失败,团队生成不应采取进一步操作。 单元测试失败应被视为生成失败。
  • 如果解决方案生成成功,团队生成应运行控制解决方案部署的自定义项目文件。 在此过程中,Team Build 将调用 Internet Information Services (IIS) Web 部署工具 (Web 部署) 在目标 Web 服务器上安装打包的 Web 应用程序,并将调用 VSDBCMD.exe 实用工具在目标数据库服务器上运行数据库创建脚本。

这说明了该过程:

说明上述过程。

Contact Manager 示例解决方案包括可从 MSBuild 或 Team Build 运行的自定义 MSBuild 项目文件 Publish.proj。 如 了解生成过程中所述,此项目文件定义了将 Web 包和数据库部署到目标环境的逻辑。 如果文件在 Team Build 中运行,则该文件包含的逻辑会省略生成和打包过程,只保留要运行的部署任务。 这是因为,以这种方式自动执行部署时,通常需要确保解决方案成功生成,并在部署过程开始之前通过任何单元测试。

下一部分介绍如何通过创建新的生成定义来实现此过程。

注意

此过程(其中单个自动化过程生成、测试和部署解决方案)可能最适用于部署到测试环境。 对于过渡环境和生产环境,你更可能希望部署已在测试环境中验证和验证的以前版本的内容。 下一主题 部署特定生成中介绍了此方法。

谁执行此过程?

通常,TFS 管理员执行此过程。 在某些情况下,开发人员团队负责人可能会负责 TFS 中的团队项目集合。 若要创建新的生成定义,你需要是包含解决方案的团队项目集合的 “项目集合生成管理员” 组的成员。

为 CI 和部署创建生成定义

下一过程介绍如何创建 CI 触发的生成定义。 如果生成成功,则会使用自定义 MSBuild 项目文件中的 逻辑部署解决方案。

为 CI 和部署创建生成定义

  1. 在 Visual Studio 2010 的 “团队资源管理器” 窗口中,展开团队项目节点,右键单击“ 生成”,然后单击“ 新建生成定义”。

    在 Visual Studio 2010 的“团队资源管理器”窗口中,展开团队项目节点,右键单击“生成”,然后单击“新建生成定义”。

  2. 在“ 常规 ”选项卡上,为生成定义指定一个名称 (例如 DeployToTest) 和可选说明。

  3. 在“ 触发器 ”选项卡上,选择要触发新生成的条件。 例如,如果要在开发人员每次签入新代码时生成解决方案并部署到测试环境,请选择“ 持续集成”。

  4. 在“ 生成默认值 ”选项卡上的“ 将生成输出复制到以下放置文件夹 ”框中,键入放置文件夹的通用命名约定 (UNC) 路径 (例如 \TFSBUILD\Drops) 。

    在“生成默认值”选项卡上的“将生成输出复制到以下放置文件夹”框中,键入放置文件夹的通用命名约定 (UNC) 路径 (例如\TFSBUILD\Drops) 。

    注意

    此放置位置存储多个内部版本,具体取决于配置的保留策略。 如果要将部署项目从特定生成发布到过渡或生产环境,可在其中找到它们。

  5. 在“ 进程 ”选项卡上的“ 生成进程文件 ”下拉列表中,保持 “DefaultTemplate.xaml ”处于选中状态。 这是添加到所有新团队项目的默认生成过程模板之一。

  6. “生成过程参数 ”表中,单击“ 要生成的项” 行,然后单击 省略号 按钮。

    在“生成过程参数”表中,单击“要生成的项”行,然后单击省略号按钮。

  7. 在“ 要生成的项 ”对话框中,单击“ 添加”。

  8. 浏览到解决方案文件的位置,然后单击“ 确定”。

    浏览到解决方案文件的位置,然后单击“确定”。

  9. 在“ 要生成的项 ”对话框中,单击“ 添加”。

  10. “类型的项 ”下拉列表中,选择“ MSBuild 项目文件”。

  11. 浏览到用于控制部署过程的自定义项目文件的位置,选择该文件,然后单击“ 确定”。

    浏览到用于控制部署过程的自定义项目文件的位置,选择该文件,然后单击“确定”。

  12. 要生成的项 ”对话框现在应显示两项。 单击" 确定"。

    “要生成的项”对话框现在应显示两项。单击“确定”。

  13. 在“ 进程 ”选项卡上的“ 生成过程参数 ”表中,展开“ 高级 ”部分。

  14. “MSBuild 参数” 行中,添加要生成的 任一 项所需的任何 MSBuild 命令行参数。 在 Contact Manager 解决方案方案中,需要以下参数:

    /p:DeployOnBuild=true;DeployTarget=Package;
       TargetEnvPropsFile=EnvConfig\Env-Dev.proj
    

    在“MSBuild 参数”行中,添加要生成的任一项所需的任何 MSBuild 命令行参数。

  15. 在本示例中:

    1. 生成 Contact Manager 解决方案时,需要 DeployOnBuild=trueDeployTarget=package 参数。 这会指示 MSBuild 在生成每个 Web 应用程序项目后创建 Web 部署包,如 生成和打包 Web 应用程序项目中所述。
    2. 生成 Publish.proj 文件时,需要使用 TargetEnvPropsFile 参数。 此属性指示特定于环境的配置文件的位置,如 了解生成过程中所述。
  16. 在“ 保留策略 ”选项卡上,根据需要配置要保留的每种类型的生成数。

  17. 单击“保存” 。

将生成排入队列

此时,你至少创建了一个新的生成定义。 定义的生成过程现在将根据在生成定义中指定的触发器运行。

如果已将生成定义配置为使用 CI,可以通过两种方式测试生成定义:

  • 将某些内容签入团队项目以触发自动生成。
  • 手动将生成排队。

手动将生成排队

  1. “团队资源管理器” 窗口中,右键单击生成定义,然后单击“ 排队新建生成”。

    在“团队资源管理器”窗口中,右键单击生成定义,然后单击“排队新建生成”。

  2. 在“ 队列生成 ”对话框中,查看生成属性,然后单击“ 队列”。

    在“队列生成”对话框中,查看生成属性,然后单击“队列”。

若要查看生成进度和结果(无论它是手动触发还是自动触发),请在 “团队资源管理器” 窗口中双击生成定义。 这将打开“ 生成资源管理器” 选项卡。

若要查看生成进度和结果,无论它是手动触发还是自动触发,请在“团队资源管理器”窗口中双击生成定义。

在这里,你可以对失败的生成进行故障排除。 如果双击单个生成,可以查看摘要信息并单击到详细的日志文件。

如果双击单个生成,可以查看摘要信息并单击到详细的日志文件。

在尝试另一个生成之前,可以使用此信息来排查失败的生成并解决任何问题。

注意

在向生成服务器授予目标环境中所需的任何权限之前,执行部署逻辑的生成可能会失败。 有关详细信息,请参阅 配置团队生成部署的权限

监视生成过程

TFS 提供了广泛的功能来帮助监视生成过程。 例如,生成完成后,TFS 可以向你发送电子邮件或在任务栏通知区域中显示警报。 有关详细信息,请参阅 运行和监视生成

结论

本主题介绍了如何在 TFS 中创建生成定义。 生成定义针对 CI 进行配置,因此每当开发人员将内容签入到团队项目时,生成过程都会运行。 生成定义执行自定义 MSBuild 项目文件,以将 Web 包和数据库脚本部署到目标服务器环境。

若要在生成过程中成功执行自动部署,需要向目标 Web 服务器和目标数据库服务器上的生成服务帐户授予适当的权限。 本教程的最后一个主题 为 Team Build Deployment 配置权限介绍了如何标识和配置从 Team Build 服务器自动部署所需的权限。

深入阅读

有关创建生成定义的详细信息,请参阅 创建基本生成定义定义生成过程。 有关排队生成的详细信息,请参阅 将生成排队