2013-10-03 47 views
0

我构建了一个包含大量Web应用程序项目的代码库,并且在构建期间为我们的构建存储生成了webdeploy包。在构建过程模板中的AgentScope期间获取TFS构建代理ID?

由于NTFS中260字符长度的路径限制,我的构建失败,这要感谢webdeploy在用于构建包的目录内生成重复的文件夹结构,这有效地将用于路径中文件夹的字符数加倍。对于包含项目名称和构建标签的构建工作区,这可能会相当长。

为了弥补这个第一个问题,我使用_PackageTempDir = C:\ TfsTmp \ Pkg \重定向了包构建目录,这要感谢我的个人英雄Sayed Ibrahim Hashimi提示。这很好,现在构建成功完成。但是,这限制了我们每个构建代理的单个构建,因为所有代理都会尝试使用相同的硬编码路径。

为了弥补这个问题,我想使用用于定义生成代理工作区的$(BuildAgentId)变量,但我不知道如何在生成过程模板中取消引用此变量。当我尝试时,我只是出现在我的构建服务器上的文件夹结构,如C:\ TfsTmp [$(BuildAgentId)] \ Pkg或C:\ TfsTmp \ $(BuildAgentId)\ Pkg或类似文件。

这个变量在BPT里面不可访问吗?有没有更好的方法来区分这些文件夹?有没有更好的方法可以解决我在构建webdeploy包时遇到的最初问题?

回答

2

BuildAgent信息在“Run On Agent”范围内应该可以访问一次。看看IBuildAgent和IBuildDetail来了解一个想法。

您可能能够从代理的URI获取代理ID。我还没有测试过,但这是一个开始。

String agentId = LinkingUtilities.DecodeUri(buildAgent.Uri.AbsoluteUri).ToolSpecificId; 
+0

我结束了使用BuildAgent.Name,它返回给TFS管理控制台中的构建代理的名称,但这足够接近我到那里。谢谢! – bwerks