我正在构建一个包含许多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包中的原始问题?
答案 0 :(得分:2)
BuildAgent信息应该可以在“Run On Agent”范围内访问。看看IBuildAgent和IBuildDetail就可以了解一下。
您可以从代理的URI中获取代理ID。我还没有测试过这个,但这是一个开始。
String agentId = LinkingUtilities.DecodeUri(buildAgent.Uri.AbsoluteUri).ToolSpecificId;