【问题标题】:Move workdir to another drive and set max size将 workdir 移动到另一个驱动器并设置最大大小
【发布时间】:2018-09-04 15:45:08
【问题描述】:

这方面的文档非常稀少 (https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/v2-windows?view=vsts#download-configure)

如何在 C 上安装 VSTS 代理,但将 workdir 保留在其他驱动器上?
如何强制 VSTS 代理回收空间或将代理限制为 X gb?

【问题讨论】:

    标签: tfs build azure-devops


    【解决方案1】:

    它能够将工作目录更改为另一个驱动程序。

    对于新的构建代理,当你运行.\config.cmd 命令时,有一个步骤叫做:

    Enter work folder (press enter for _work): 您可以在此处更改路径。

    默认工作文件夹位置是_work 文件夹,直接位于 代理安装目录。您可以将位置更改为 在代理安装目录之外, 例如:D:_work

    对于现有的构建代理,您可以remove and re-configure an agent。删除旧的工作文件夹不会破坏代理。

    您可以参考这个blog 作为教程(适用于 TFS,但类似于 VSTS)。


    How to force VSTS agent to reclaim space or limit agent to X gb?

    您无法为本地代理执行此操作。代理功能中没有这样的设置。

    如果你需要这个功能,Hosted agents offer 10 GB of space.

    如果您担心磁盘空间:

    1. 通过将Build.Clean 变量设置为all,它将在拉取源之前清除目录。
    2. 使用“删除文件”实用程序任务。 $(Agent.BuildDirectory)$(Build.SourcesDirectory)variables 对此很有用。构建成功后会删除文件。

    更多信息请参考:Clear the work folder after each build?

    【讨论】:

    • 删除工作目录是否安全?我想将 workdir 放在 Azure 上的临时 SSD 驱动器上。
    • 好吧,我猜你误会了我。我的问题是如果在 vm 重新启动后目录消失了会发生什么。特工会发疯吗?
    • @4c74356b41 很抱歉造成误解。 这不会影响代理。刚刚在本地做了一个简单的测试,当构建代理没有运行时,删除构建代理上的整个_work文件夹,触发新的构建,TFS会自动创建一个新的_work 文件夹在这种情况下,构建运行成功。它应该是一些你在 Azure 上的 SSD 驱动器。经纪人不会慌张。您可以在您的环境中进行测试和双重确认。
    【解决方案2】:

    更改它的简单方法是转到代理文件夹,显示所有隐藏文件。 你会发现一个 JSON 文件 ".agent" 打开它,在 "workFolder" 中指定你想要的目录的路径。

    不要忘记使用双斜杠 \ 进行转义,并且在执行此操作之前必须停止代理。

    【讨论】:

      【解决方案3】:

      当您安装代理时,它会要求您提供工作目录。默认为代理安装文件夹下的 _work,但您可以在安装时更改此设置。

      您不能限制代理使用 X 空间,但您可以添加构建/发布任务以使用 powershell 检查可用空间,如果它在 Y 下则使该过程失败。

      更新

      此任务可能是您的第一个构建/发布任务,因此如果空间不足,您将不会在此过程中走得太远。

      【讨论】:

      • 您可能需要运行 tf workspace /delete 来删除服务器上的任何 TFVC 工作区映射。之后,您可以在代理关闭时安全地清除现有文件夹..
      • 好吧,我说的是 VSTS,而不是 TFS @jessehouwing
      • 在 VSTS 中,您还可以拥有 TFVC 存储库。这不是 TFS 与 VSTS 的事情。如果您只使用 Git 存储库,您可以简单地清理工作文件夹。不过,您接下来的几次构建可能会更慢,因为代理需要再次从头开始获取存储库。
      • 啊,就是你的意思。我不在乎,我只在乎它是否破坏了代理@jessehouwing
      • 是的,完全删除您的工作文件夹是安全的。代理将在第一次运行时创建它。
      【解决方案4】:

      也可以使用联结链接,例如在 CMD 中运行它(用你的真实位置替换文件夹):

      mklink /J "C:\agent\_work" "D:\agent\_work"
      

      现在,_work 文件夹实际上位于 D: 驱动器上,但代理会认为它是 C: 上的真实文件夹。 我自己测试过,效果很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2018-10-07
        相关资源
        最近更新 更多