自定义 Lab Management 工作流
可以使用实验室默认模板(LabDefaultTemplate)与实验室环境运行自动生成应用程序,部署新生成的实验室环境,因此,运行在新生成运行。 有关如何使用实验室默认模板的信息,请参见 如何:为 SCVMM 环境创建“生成-部署-测试”工作流 和 如何:为标准环境创建“生成-部署-测试”工作流。 但是,每个生成,部署,并且测试过程可能会稍有不同由于不同的要求。 例如,某个工作流可能要求从常规生成位置复制测试二进制文件,而另一个工作流要求从临时位置复制测试二进制文件。 或某个工作流可能要求实验室环境在SCVMM库中保存,以便测试人员可以部署,而另一个工作流根本不保存实验室环境。 因为实验室默认模板基于Windows workflow 4.0,它是可完全扩展和自,因此,您可以自定义LabDefaultTemplate以满足您的特定要求。 本主题介绍自定义的实验室默认模板约定步骤。
要求
- Visual Studio 旗舰版, Visual Studio 高级专业版, Visual Studio 专业测试工具版
下面是一些方案实验室默认模板的自定义是有用的位置:
用于指定不同于生成放置位置的测试二进制文件位置的自定义
用于支持需要在部署后重新启动计算机的应用程序安装程序的自定义
用于读取源代码管理文件的自定义
用于使用生成代理帐户访问生成放置位置的自定义
用于使用实验室服务帐户访问其他位置的自定义
工作流自定义的基本概念
工作流自定义中涉及三个关键概念:
模板 模板可定义作为工作流一部分的活动或步骤的序列。 模板基于 Windows Workflow Foundation 4.0,且在源代码管理中作为 .xaml 文件存储。 若要将模板加载到工作流编辑器中,请双击相应的 .xaml 文件。 在编辑器中,您将能看到确定工作流的各种活动和序列。 然后,您可以使用具有不同应用范围的变量、条件逻辑、循环等对模板进行编程,就像使用任何其他编程语言一样。 利用 Windows Workflow Foundation,您可以自定义实验室默认模板以符合您的需求。
活动 活动是工作流的构建基块,实验室默认模板使用了很多活动。 您可以在**“Team Foundation Lab Management 活动”标题下的“工具箱”**中查找更多活动。 若要在工作流中使用活动,请将该活动从工具箱中拖动到 Visual Studio 工作流编辑器中的模板中的适当位置。 您可以通过查看活动的属性来确定输入参数和输出参数。 有关每个 Lab Management 活动的更多信息,请参见实验室管理工具版工作流活动。 如果产品附带的活动不足以满足您的要求,则可以添加新活动。
参数 可以为您需要从用户获得的输入创建新的输入参数,并将这些值传递给活动。 选择 参数 选项"工作流编辑器"窗口底部查看现有参数。 如果创建了新参数,则这些参数会显示在生成定义中的**“过程”选项卡的“生成过程参数”**部分。
查看以下两个需要自定义的示例时请考虑这些概念。 第一个示例讨论如何更改模板中的现有活动的输入参数,第二个示例讨论如何从工具箱添加新活动。 这些示例应能为您提供足够的上下文根据自己的要求自定义实验室默认模板。
开始自定义之前
必须完成一些一般步骤,在开始自定义实验室默认模板之前。 下图演示了这些步骤。
准备进行自定义
在团队资源管理器中,双击团队项目的**“源代码管理”**节点。
在**“源代码管理资源管理器”中,展开“源代码管理”树并查找“$/<项目名>/BuildProcessTemplates”**文件夹。
将此文件夹映射到本地文件夹,例如 C:\Sources。
右击文件LabDefaultTemplate.11.xaml然后选择 获取最新版本。
复制该文件LabDefaultTemplate.11.xaml并为它指定新名称,例如,LabDefaultTemplate_customize.11.xaml
将此新文件添加到源代码管理。
双击此新文件。 该文件将在**“Visual Studio 工作流编辑器”**中打开。
接下来将自定义所做实验室默认模板的副本。
用于指定不同于生成放置位置的测试二进制文件位置的自定义
默认工作流模板 LabDefaultTemplate 假定测试二进制文件的位置与生成的放置位置相同。 但是,在您所处的情况下,测试代码可能不会随产品代码一起生成。 当出现这种情况时,您可能希望自定义该模板,以便从不同的位置选取测试二进制文件。 此自定义涉及三个步骤,如下图中所示。
定义工作流的输入参数以指定测试二进制文件路径
定义输入参数
在“工作流编辑器”窗口顶部,单击**“参数”**选项卡。
选择 创建参数。 在文本框中,键入参数的名称,例如 TestBinariesLocation。 在的 方向 下拉列表中,选择 *** 在 ***。 在的 参数类型 下拉列表中,选择 字符串。
向 ExecuteRemoteTestRun 活动传递参数值
此活动将创建一个远程测试运行,并一直等到该测试运行完成,然后使用测试运行统计信息更新生成信息。
传递参数值
在工作流编辑器中,滚动到**“运行测试”活动。 尽管该活动的显示名称为“运行测试”,但活动类型为“ExecuteRemoteTestRun”**。
右击该事件然后选择 属性。 **“属性”**窗口将在右下角打开并显示此活动的输入和输出参数。 此活动的输入参数之一是 TestDirectory,可用于设置测试二进制文件位置的路径。
在**“属性”窗口中单击“TestDirectory”**。 在行末尾处单击省略号 (…)。
在 表达式编辑器,键入" TestBinariesLocation "然后选择 确定。
在 文件 菜单中,选择 *** 保存LabDefaultTemplate_customize.11.xaml ***
在源代码管理资源管理器中,选择 签入 图标。
您现在可以使用 customized .xaml 文件来创建新的生成定义。 新的输入参数 TestBinariesLocation 将显示在生成定义中的**“过程”选项卡的“杂项”**部分,您可以在此处分配一个值。
用于支持需要在部署后重新启动计算机的应用程序安装程序的自定义
,在部署应用程序后,实验室默认模板,而不重新启动实验室环境。 您可能希望自定义模板以支持在部署后可能需要重新启动的应用程序。 如果在实验室环境中手动部署的应用程序,则将只重新启动计算机上安装了该应用程序。 Visual Studio Lab Management不支持虚拟机中的操作环境中。 因此,若要启动一个设备要求所有计算机在实验室环境重新启动。
警告
确保您的部署脚本不会重新启动计算机。如果出现这种情况,运行部署脚本的生成代理将会失去与生成控制器的连接,而工作流也可能会停止。
重新启动虚拟机,在部署新的生成后需要向LabDefaultTemplate添加三个活动:
停止环境
启动环境
继续执行剩余工作流之前等待虚拟机启动
停止环境
您可以通过将**“StopLabEnvironment”活动从“工具箱”**拖动到工作流模板并初始化该活动的变量,向默认工作流模板添加停止环境活动。
停止环境
在工作流编辑器中,滚动到显示名称为**“应用程序部署成功”**的活动。
在 查看 菜单中,选择 工具箱。 工具箱将在左侧打开,并显示**“Team Foundation Build 活动”列表。 在活动列表中滚动,直到看到“Team Foundation Lab Management 活动”**列表。
在工具箱中,选择 *** StopLabEnvironment *** 事件。 将该活动拖动到工作流编辑器中,并将其放在**“应用程序部署成功”**活动之前。
右击该活动,然后单击**“属性”。 “属性”窗口将显示此活动的输入和输出属性。 请注意,工作流已具有一个名为“LabEnvironmentUri”**的变量,该变量引用环境 URI。
选择 变量 选项。 将显示变量列表。
在**“LabEnvironmentUri”行中的“默认”列下,双击“输入 VB 表达式”**。 在文本框中,键入 LabEnvironmentUri。 编辑器将显示使用的任何现有参数,您可以从该列表中选择值,而不用键入值。
启动环境
可以将启动环境事件到实验室默认模板通过拖动 *** StartLabEnvironment *** 事件从 工具箱 到工作流模板并初始化该活动的变量。
启动环境
在工具箱中,选择 *** StartLabEnvironment *** 事件。 将该活动拖动到工作流编辑器中,并将它放在**“应用程序部署成功”活动之前但在“StopLabEnvironment”**活动之后。
右击该活动,然后单击**“属性”。 “属性”窗口将显示此活动的输入和输出属性。 同样,工作流已具有一个名为“LabEnvironmentUri”**的变量,该变量引用环境 URI。
选择 变量 选项。 将显示变量列表。
在**“LabEnvironmentUri”行中的“默认”列下,双击“输入 VB 表达式”**。 在文本框中,键入 LabEnvironmentUri。 编辑器将显示使用的任何现有参数,您可以从该列表中选择值,而不用键入值。
在继续执行剩余工作流之前,等待计算机重新启动。
您可以通过将**“延迟”活动从“工具箱”拖动到工作流模板中并初始化该活动的变量,添加等待虚拟机启动的时间。 此活动位于“工具箱”的“基元”**选项卡中。
等待虚拟机启动
在工具箱中,选择 基元 选项。
单击**“延迟”活动。 将该活动拖动到工作流编辑器中,并将它放在“应用程序部署成功”活动之前但在“StartLabEnvironment”**活动之后。
右击该活动,然后单击**“属性”。 “属性”窗口将显示此活动的输入和输出属性。 请注意,工作流已具有一个名为“Duration”**的变量,该变量引用等待时间。
在 属性 窗口中,选择 持续时间 然后选择省略号(…)。
在**“表达式编辑器”**中,按照 TimeSpan.FromMinutes(10) 格式键入等待时间(例如,10 分钟)。
修改此模板后,将它签入到源代码管理中,并使用它创建新的生成定义以部署需要在安装后重新启动的应用程序。
用于读取源代码管理文件的自定义
如果您的工作流模板创建自定义操作然后使用它们,则应确保生成代理,使用实验室服务帐户,通信,可以访问这些事件。 因为这些活动必须作为自定义程序集签入到源代码管理系统,所以必须确保该实验室服务帐户有权读取自定义程序集签入的路径。 有关实验室服务帐户的更多信息,请参见如何:配置实验室服务帐户。您可以使用 tf permissions 命令为实验室服务帐户授予权限。 例如,若要为路径 $/MyProject/CustomAssemblies 上的实验室服务帐户 mydomain\labAccount 授予读取权限,则应执行与下面类似的命令:C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE>tf permission /user:mydomain\labAccount /collection:http://aseemb-tfs11: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) 的开发人员入门