使用生成工作区
正如你需要开发计算机上的工作区来开发你的应用程序,你必须指定生成代理用来生成和测试应用程序的工作区。
你希望做什么?
为生成定义指定工作区
参阅生成工作区定义的示例
在工作区中复制数据
了解生成工作区的工作原理
为生成定义指定工作区
在定义生成过程时,你应在指定工作区时遵循一些最佳做法。
包含所有所需的文件夹。
确保你包含了包括生成过程所需的文件的所有文件夹。 例如,如果向“过程”选项卡上的“项目”字段添加其他解决方案,则可能必须将其他映射添加到工作区。
仅包含所需的文件夹。
使用**“状态”值“活动”来仅映射生成过程所需的文件夹。 如果映射文件夹的某个子文件夹包含生成过程不需要的文件,则使用“状态”值“已掩蔽”**来映射该子文件夹。 在许多情况下,当你创建生成定义时,将在工作区中映射团队项目的根文件夹。 此配置会导致生成代理下载团队项目的版本控制文件夹中的所有文件。 如果此文件夹包含大量数据,则生成会下载大量不需要的数据,从而浪费生成系统资源并减慢你的生成过程。
从“过程”选项卡上的“项目”字段中移除项时,请查找可从工作区移除的映射。
提示
有关优化工作区的详细信息,请参阅优化工作区。
使用 $(SourceDir) 标记将服务器文件夹映射到 \Sources 子目录中的本地文件夹。
在大多数情况下,生成代理上的源文件最好位于工作目录中的 ..\Sources 子目录下。 可使用“生成代理文件夹”框中的 $(SourceDir) 标记来指定此位置。
了解工作区影响签入所触发的生成定义的方式。
如果已将生成定义的触发器设置为**“持续集成”、“滚动生成”或“封闭签入”,则会将映射的服务器文件夹绑定到生成过程。 以下是一个示例。 开发人员签入对文件夹所做的更改。 该文件夹在生成定义的工作区中映射,该生成定义具有一个“封闭签入”**触发器。 更改将被阻止,直到生成过程完成。
生成定义工作区示例
Roberto 是一名版本生成工程师,他创建了 Storefront Nightly 生成定义。
此生成定义将生成两个解决方案:$/Core/Controllers/Controllers.sln 和 $/Core/Viewers/Viewers.sln。 因此,它必须映射包含这些解决方案的两个文件夹、这些文件夹所包含的项目以及它们所需的所有其他文件。
为了提高生成过程效率,Roberto 排除了包含其生成过程不需要的文档文件的文件夹:$/Core/Viewers/Docs。
解决方案依赖于其他公司的组件库中的一些二进制文件。 这些二进制文件受专有机制保护,该机制要求它们位于特定的物理文件夹中:c:\adatum\widgets.
在工作区中复制数据
通过将映射从一个工作区复制到另一个工作区,可为你节省时间。
从某个工作区中复制映射
选择**“复制现有工作区”**。
在**“选择要复制的工作区”**对话框中,从工作区中复制映射。
从其他生成定义工作区或其他团队成员的工作区中复制映射
执行以下步骤之一:
若要从其他生成定义工作区复制映射,请打开生成定义,然后选择“源设置”选项卡。
若要从其他团队成员的工作区复制映射,请让团队成员从菜单栏中依次选择“文件”、“源代码管理”、“高级”、“工作区”。 选择工作区,然后选择**“编辑”**。
打开**“工作文件夹”表中行的快捷菜单,然后选择“全选”**。
打开**“工作文件夹”表中行的快捷菜单,然后选择“复制”**。
创建一个文本文件,将剪贴板的内容粘贴到该文本文件中,然后保存该文件。
创建一个生成定义,或修改作为将映射复制到的目标的现有生成定义。
有关详细信息,请参阅创建或编辑生成定义。
在“源设置”选项卡上,打开“工作文件夹”表中行的快捷菜单,然后选择“粘贴”。
必要时,可采用映射以供生成代理使用。 具体而言,请确保**“生成代理文件夹”**框中的值是正确的,并包含相应的 $(SourceDir) 标记。
了解生成工作区的工作原理
在生成过程中,生成代理将编译源文件,并对源文件执行其他操作。 生成代理应先从版本控制服务器上的文件夹中将文件下载到本地工作目录,然后才能做到这一点。 为了帮助下载这些文件,生成代理将创建一个版本控制工作区,该工作区会将服务器上的文件夹映射到生成代理的工作目录中的本地文件夹。
在生成过程开始之前
在你的生成系统中设置每个生成代理的工作目录。 有关详细信息,请参阅部署和配置生成代理。
当你创建生成定义时,你在**“工作区”**选项卡上,指定包含要下载的文件的文件夹以及将这些文件夹映射到生成代理上的本地文件夹的方式。
在生成过程中
生成过程会将你的工作区规范传递到 CreateWorkspace 工作流活动以在其工作目录中创建一个工作区。
生成过程将使用 DownloadFiles 活动将文件下载到该工作区。 在完成此步骤后,生成代理可对这些文件执行操作(如编译)。