【问题标题】:TFS build agent updatesTFS 构建代理更新
【发布时间】:2018-11-16 17:48:44
【问题描述】:

我的问题可能听起来微不足道,但经过几天的研究,我无法得出任何结论。 应该多久更新一次生产构建代理上的构建工具。

一些细节来理解为什么我有这个困境。 一方面,我想保持生产构建环境尽可能稳定。 目前使用 TFS 服务器 2017,构建代理使用作为 Visual Studio 安装一部分的 msbuild (VS2017 - 15.0.26228.0)。我们构建 C++ 非托管应用程序。 最近在追一个问题,我们的应用程序会无缘无故卡住很长时间(忙了7-8分钟,然后继续)。在尝试调试问题时,我从相同的源创建了新的可执行文件,但使用不同的系统来构建它(它有 VS2017 - 15.5.27130.2036)。它是从视觉工作室构建的。我注意到 exe 的大小不同,当然它没有冻结问题。检查发行说明没有帮助,我没有看到任何可以解释生成的二进制文件的差异的东西。 我不得不说,我们的代码有点复杂,使用了大量的第三方库,在内存中创建了很多复杂的结构。 导致冻结的代码区域与重新初始化大量对象、重新创建大量复杂结构的向量有关......

无论如何,问题在于行业如何处理更新以在生产环境中构建工具。任何想法将不胜感激。

【问题讨论】:

    标签: tfs msbuild


    【解决方案1】:

    每个代理都有一组表明它可以做什么的能力。功能是由代理软件自动发现的名称-值对,在这种情况下它们称为系统功能,或者您定义的那些在这种情况下称为用户功能。

    您可以查看代理的系统功能,并通过导航到 代理池 中心并选择所需代理的 功能 选项卡来管理其用户功能:@ 987654321@

    如果您愿意,构建代理不会更新这些功能 更新它们,您必须在构建代理上手动更新它们 机器。在代理上安装新软件后,您必须重新启动 新功能出现的代理。

    【讨论】:

      【解决方案2】:

      维护构建环境的方法有很多,因此您会发现很难获得行业标准的方法。 我已经决定使用虚拟机映像和容器来提供稳定、可重复的环境。

      System Center 和容器注册表用于存储工件,我每晚铺设 10 多个构建服务器以恢复 VM 映像,从而确保相同的工具链日复一日地到位。

      对于升级,使用新工具创建一个新映像,然后在将其设置为默认映像之前进行单独测试。如果工具链支持并行安装,如 MSBuild、Typescript 等,那么破坏某些东西的风险非常低,因为这些工具的隔离性非常好。我还发现如果项目文件针对特定的工具链而不是自动浮动到最新版本,那么您的生活将会更加愉快。

      有些工具在这方面不够出色,往往会污染环境或将您限制在工具的单一版本中。为此,如果可能,我会修复它们的容器。如果这不可能,那么这些工具会获得一个新图像,以及一组专用于该工具的新 CI 框。

      一般来说,我订阅了拉动模型进行更新,其中软件是手动更新的。这在为全球众多开发人员提供服务时至关重要,而且 CI 环境不能因为自我更新而变得不稳定。

      【讨论】:

        猜你喜欢
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多