【问题标题】:Get TFS Build Agent Id during AgentScope in Build Process Template?在构建过程模板中的 AgentScope 期间获取 TFS 构建代理 ID?
【发布时间】:2013-10-10 10:41:45
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: build tfs msbuild webdeploy tfsbuild


    【解决方案1】:

    在“Run On Agent”范围内应该可以访问 BuildAgent 信息。查看 IBuildAgent 和 IBuildDetail 以获得一个想法。

    您也许可以从代理的 URI 中获取代理 ID。我还没有对此进行测试,但这是一个开始。

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

    【讨论】:

    • 我最终使用了 BuildAgent.Name,它返回在 TFS 管理控制台中为构建代理提供的名称,但这已经足够接近我了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 2014-08-07
    • 2018-04-27
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多