在构建过程模板中的AgentScope期间获取TFS构建代理ID?

时间:2013-10-03 16:18:21

标签: build tfs msbuild webdeploy team-build

我正在构建一个包含许多Web应用程序项目的代码库,并且我们在构建期间为构建存储生成了webdeploy包。

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

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

为了解决这个问题,我想使用$(BuildAgentId)变量来定义Build Agent工作区,但我不知道如何在Build Process Template中取消引用这个变量。当我尝试时,我只是在我的构建服务器上出现文件夹结构,如C:\ TfsTmp [$(BuildAgentId)] \ Pkg,或C:\ TfsTmp \ $(BuildAgentId)\ Pkg,或类似的。

此变量是否无法从BPT内部访问?有没有更好的方法来区分这些文件夹?是否有更好的方法可以解决构建webdeploy包中的原始问题?

1 个答案:

答案 0 :(得分:2)

BuildAgent信息应该可以在“Run On Agent”范围内访问。看看IBuildAgent和IBuildDetail就可以了解一下。

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

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