自定义 Lab Management 工作流

更新:2010 年 10 月

Visual Studio 实验室管理工具版的端对端工作流将帮助您实现生成应用程序、将新生成部署到虚拟环境以及对新生成运行测试等任务的自动化。 LabDefaultTemplate 作为可立即使用的默认工作流模板附带提供。 有关如何使用 LabDefaultTemplate 的信息,请参见如何:在虚拟环境中部署应用程序。 但是,每个生成-部署-测试 (BDT) 过程都可能因为要求不同而稍有不同。 例如,某个工作流可能要求从常规生成位置复制测试二进制文件,而另一个工作流要求从临时位置复制测试二进制文件。 或者,某个工作流可能要求将环境保存在库中,以便每个测试人员能从中进行部署,而另一个工作流根本不保存环境。 因为默认工作流模板基于 Windows Workflow 4.0,所以它是可完全扩展和自定义的,而且您可以自定义 LabDefaultTemplate 以满足您的特定要求。

本主题介绍了自定义工作流模板的一般步骤,然后提供了非常适合使用自定义的五个示例方案:

  • 指定不同于生成位置的测试二进制文件位置。

  • 支持要求在安装后重新启动的应用程序部署。

  • 读取源代码管理文件。

  • 使用生成代理帐户访问生成放置位置。

  • 使用实验室服务帐户访问其他位置。

工作流自定义的基本概念

工作流自定义中涉及三个关键概念:

  • 模板 模板可定义作为工作流一部分的活动或步骤的序列。 模板基于 Windows Workflow Foundation 4.0,且在源代码管理中作为 .xaml 文件存储。 若要将模板加载到工作流编辑器中,请双击相应的 .xaml 文件。 在编辑器中,您将能看到确定工作流的各种活动和序列。 然后,您可以使用具有不同应用范围的变量、条件逻辑、循环等对模板进行编程,就像使用任何其他编程语言一样。 利用 Windows Workflow Foundation,您可以自定义实验室默认模板以符合您的需求。

  • 活动 活动是工作流的构建基块,实验室默认模板使用了很多活动。 您可以在**“Team Foundation Lab Management 活动”标题下的“工具箱”**中查找更多活动。 若要在工作流中使用活动,请将该活动从工具箱中拖动到 Visual Studio 工作流编辑器中的模板中的适当位置。 您可以通过查看活动的属性来确定输入参数和输出参数。 有关每个 Lab Management 活动的更多信息,请参见Team Foundation LabManagement 活动。 如果产品附带的活动不足以满足您的要求,则可以添加新活动。

  • 参数 可以为您需要从用户获得的输入创建新的输入参数,并将这些值传递给活动。 单击“工作流编辑器”窗口底部的**“参数”选项卡可查看现有参数。 如果创建了新参数,则这些参数会显示在生成定义中的“过程”选项卡的“生成过程参数”**部分。

查看以下两个需要自定义的示例时请考虑这些概念。 第一个示例讨论如何更改模板中的现有活动的输入参数,第二个示例讨论如何从工具箱添加新活动。 这些示例应能为您提供充分的上下文来根据自己的要求自定义 LabDefaultTemplate

开始自定义之前

开始自定义 LabDefaultTemplate 工作流模板之前,您必须先完成一些一般步骤。 下图演示了这些步骤。

默认工作流模板的文件夹位置

准备进行自定义

  1. 在团队资源管理器中,双击团队项目的**“源代码管理”**节点。

  2. 在**“源代码管理资源管理器”中,展开“源代码管理”树并查找“$/<项目名>/BuildProcessTemplates”**文件夹。

  3. 将此文件夹映射到本地文件夹,例如 C:\Sources。

  4. 右击 LabDefaultTemplate.xaml 文件,然后单击**“获取最新版本”**。

  5. 创建 LabDefaultTemplate.xaml 文件的副本并为它指定新名称,例如,LabDefaultTemplate_customize.xaml

  6. 将此新文件添加到源代码管理。

  7. 双击此新文件。 该文件将在**“Visual Studio 工作流编辑器”**中打开。

接下来,您将自定义刚刚用默认工作流模板创建的副本。

用于指定不同于生成放置位置的测试二进制文件位置的自定义

默认工作流模板 LabDefaultTemplate 假定测试二进制文件的位置与生成的放置位置相同。 但是,在您所处的情况下,测试代码可能不会随产品代码一起生成。 当出现这种情况时,您可能希望自定义该模板,以便从不同的位置选取测试二进制文件。 此自定义涉及三个步骤,如下图中所示。

从工具箱中拖出一个 LabManagement 活动

定义工作流的输入参数以指定测试二进制文件路径

定义输入参数

  1. 在“工作流编辑器”窗口顶部,单击**“参数”**选项卡。

  2. 单击**“创建参数”。 在文本框中,键入参数的名称,例如 TestBinariesLocation。 在“方向”下拉列表中,单击“输入”。 在“参数类型”下拉列表中,单击“字符串”**。

向 ExecuteRemoteTestRun 活动传递参数值

此活动将创建一个远程测试运行,并一直等到该测试运行完成,然后使用测试运行统计信息更新生成信息。

传递参数值

  1. 在工作流编辑器中,滚动到**“运行测试”活动。 尽管该活动的显示名称为“运行测试”,但活动类型为“ExecuteRemoteTestRun”**。

  2. 右击该活动,然后单击**“属性”**。 **“属性”**窗口将在右下角打开并显示此活动的输入和输出参数。 此活动的输入参数之一是 TestDirectory,可用于设置测试二进制文件位置的路径。

  3. 在**“属性”窗口中单击“TestDirectory”**。 在行末尾处单击省略号 (…)。

  4. 在**“表达式编辑器”中键入“TestBinariesLocation”,然后单击“确定”**。

  5. 在**“文件”菜单上,单击“保存 LabDefaultTemplate_customize.xaml”**。

  6. 在“源代码管理资源管理器”菜单栏上,单击**“签入”**图标。

您现在可以使用 customized .xaml 文件来创建新的生成定义。 新的输入参数 TestBinariesLocation 将显示在生成定义中的**“过程”选项卡的“杂项”**部分,您可以在此处分配一个值。

用于支持需要在部署后重新启动计算机的应用程序安装程序的自定义

默认工作流模板 LabDefaultTemplate 不支持在部署应用程序后重新启动虚拟环境。 您可能希望自定义模板以支持在部署后可能需要重新启动的应用程序。 如果您在虚拟环境中手动部署了该应用程序,则将只重新启动安装了该应用程序的虚拟机。 Visual Studio 实验室管理工具版不支持对环境中单独的虚拟机进行操作。 因此,若要启动一台计算机,将需要重新启动虚拟环境中的所有计算机。

警告

请确保部署脚本不会重新启动虚拟机。 如果出现这种情况,运行部署脚本的生成代理将会失去与生成控制器的连接,而工作流也可能会停止。

若要在部署新的生成后重新启动虚拟机,需要向 LabDefaultTemplate 添加三个活动:

  1. 停止环境

  2. 启动环境

  3. 继续执行剩余工作流之前等待虚拟机启动

停止环境

您可以通过将**“StopLabEnvironment”活动从“工具箱”**拖动到工作流模板并初始化该活动的变量,向默认工作流模板添加停止环境活动。

停止环境

  1. 在工作流编辑器中,滚动到显示名称为**“应用程序部署成功”**的活动。

  2. 在**“视图”菜单上单击“工具箱”。 工具箱将在左侧打开,并显示“Team Foundation Build 活动”列表。 在活动列表中滚动,直到看到“Team Foundation Lab Management 活动”**列表。

  3. 在工具箱中,单击**“StopLabEnvironment”活动。 将该活动拖动到工作流编辑器中,并将其放在“应用程序部署成功”**活动之前。

  4. 右击该活动,然后单击**“属性”。 “属性”窗口将显示此活动的输入和输出属性。 请注意,工作流已具有一个名为“LabEnvironmentUri”**的变量,该变量引用环境 URI。

  5. 单击**“变量”**选项卡。 将显示变量列表。

  6. 在**“LabEnvironmentUri”行中的“默认”列下,双击“输入 VB 表达式”**。 在文本框中,键入 LabEnvironmentUri。 编辑器将显示使用的任何现有参数,您可以从该列表中选择值,而不用键入值。

启动环境

您可以将**“StartLabEnvironment”活动从“工具箱”**拖动到工作流模板并初始化该活动的变量,以向默认工作流模板添加启动环境活动。

启动环境

  1. 在工具箱中,单击**“StartLabEnvironment”活动。 将该活动拖动到工作流编辑器中,并将它放在“应用程序部署成功”活动之前但在“StopLabEnvironment”**活动之后。

  2. 右击该活动,然后单击**“属性”。 “属性”窗口将显示此活动的输入和输出属性。 同样,工作流已具有一个名为“LabEnvironmentUri”**的变量,该变量引用环境 URI。

    单击**“变量”**选项卡。 将显示变量列表。

    在**“LabEnvironmentUri”行中的“默认”列下,双击“输入 VB 表达式”**。 在文本框中,键入 LabEnvironmentUri。 编辑器将显示使用的任何现有参数,您可以从该列表中选择值,而不用键入值。

在继续执行剩余工作流之前,等待计算机重新启动。

您可以通过将**“延迟”活动从“工具箱”拖动到工作流模板中并初始化该活动的变量,添加等待虚拟机启动的时间。 此活动位于“工具箱”“基元”**选项卡中。

等待虚拟机启动

  1. 在工具箱中,单击**“基元”**选项卡。

  2. 单击**“延迟”活动。 将该活动拖动到工作流编辑器中,并将它放在“应用程序部署成功”活动之前但在“StartLabEnvironment”**活动之后。

  3. 右击该活动,然后单击**“属性”。 “属性”窗口将显示此活动的输入和输出属性。 请注意,工作流已具有一个名为“Duration”**的变量,该变量引用等待时间。

  4. 在**“属性”窗口中单击“Duration”**,然后单击省略号 (…)。

  5. 在**“表达式编辑器”**中,按照 TimeSpan.FromMinutes(10) 格式键入等待时间(例如,10 分钟)。

修改此模板后,将它签入到源代码管理中,并使用它创建新的生成定义以部署需要在安装后重新启动的应用程序。

用于读取源代码管理文件的自定义

如果您创建自定义活动,然后在工作流模板中使用它们,则应确保使用实验室服务帐户进行通信的生成代理可访问这些活动。 因为这些活动必须作为自定义程序集签入到源代码管理系统,所以必须确保该实验室服务帐户有权读取自定义程序集签入的路径。 有关实验室服务帐户的更多信息,请参见如何:针对测试和工作流集成配置服务帐户。您可以使用 tf permissions 命令为实验室服务帐户授予权限。 例如,若要为路径 $/MyProject/CustomAssemblies 上的实验室服务帐户 mydomain\labAccount 授予读取权限,则应执行与下面类似的命令:C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE>tf permission /user:mydomain\labAccount /collection:http://aseemb-tfs10:8080/tfs/Collection0 /allow:read $/MyProject/CustomAssemblies

用于使用生成代理帐户访问生成放置位置的自定义

执行实验室工作流的生成代理使用实验室服务帐户访问生成放置位置。 如果希望生成代理改用生成代理帐户,则可以自定义工作流模板。 在模板中查找执行部署脚本的**“RunDeploymentScript”活动。 此活动将公开“SharedLocationForNetUse”**属性,该属性可用于定义应使用实验室服务帐户访问的位置。 <mtlwa:RunDeploymentScript DisplayName="Running Deployment Script" ScriptDetails="[scriptDetails]" ThrowOnError="True" SharedLocationForNetUse="[BuildLocation]" />若要使用生成代理帐户(而不是实验室服务服务帐户)访问放置位置,请从模板中删除此属性或将此属性的值设置为 ({x:Null}),如此示例中所示:mtlwa:RunDeploymentScript DisplayName="Running Deployment Script" ScriptDetails="[scriptDetails]" ThrowOnError="True" SharedLocationForNetUse="{x:Null}" />

用于使用实验室服务帐户访问其他位置的自定义

如果使用实验室服务帐户运行的生成代理需要读取生成放置位置以外的位置,则可以将**“SharedLocationForNetUse”属性的值从默认值“[BuildLocation]”**更改为所需位置。 例如,若要让使用实验室服务帐户运行的生成代理访问 \\contoso\scripts 目录,您应使用:<mtlwa:RunDeploymentScript DisplayName="Running Deployment Script" ScriptDetails="[scriptDetails]" ThrowOnError="True" SharedLocationForNetUse="\\contoso\scripts" />

请参见

任务

创建基本生成定义

参考

.NET 4 中的 Windows Workflow Foundation (WF) 的开发人员入门

概念

为应用程序生命周期使用虚拟实验室

其他资源

Team Foundation LabManagement 活动

定义生成过程

修订记录

日期

修订记录

原因

2010 年 10 月

添加了两个插图,用于总结自定义工作流时的几个步骤。

信息补充。