【问题标题】:How to control work folder for Azure DevOps pipeline?如何控制 Azure DevOps 管道的工作文件夹?
【发布时间】:2021-04-27 16:02:22
【问题描述】:

通常,如果您使用的是自托管 Azure 代理,它会自动为您选择目标文件夹(我假设基于管道名称),位于工作文件夹下...例如:

/home/xxxxx/azure/_work/2/t/

有没有一种方法可以让我从 YAML 管道中控制这个选择?我的用例是我有一个非常大的存储库,并且有几个不同的管道都可以检查它。我只有一个代理在机器上运行,所以我的偏好是我在这个代理上运行的所有管道检出到同一个文件夹(如/home/xxxxx/azure/_work/MyProject),确保只有签出这个大型 repo。

【问题讨论】:

  • 您是否考虑过进行浅层结帐以减少克隆的 repo 大小?
  • @DanielMann 这是个好主意,我可能会在其他一些情况下使用。在这种情况下,我的偏好仍然是尽可能使用一个文件夹,因为如果我不重新签出,还有一堆其他依赖项和可缓存资产可以重用。

标签: azure-devops azure-devops-self-hosted-agent


【解决方案1】:

您可以通过设置checkout: none 来避免在管道中同步源:

steps:
- checkout: none

然后添加命令行或脚本任务以通过 git 命令手动克隆 repo。

【讨论】:

  • 谢谢 Cece - 我不知道这是否有帮助。我可以手动克隆 repo,但 pwd 的值仍然可能是许多随机文件夹之一(1/s2/t 等)。我想我可以添加一个执行mkdir -p ../../myWorkFolder && cd ../../myWorkFolder 的脚本步骤,但我担心这会破坏任何任务,例如收集覆盖率和发布假设我的文件位于正常工作文件夹中的工件。
  • 您可以为这些任务设置源文件夹。
  • 好的——所以一种选择是在“_work 文件夹之外”工作,在我选择的位置,然后手动完成。有道理!
【解决方案2】:

我们最近一直在测试链接源文件夹,它工作得很好,所以这可能是一个比接受的答案更容易的答案。

也就是说,您可以创建一个特定的文件夹(比如 ~/projects/AcmeC:\projects\acme),然后在您的 Azure 管道中 steps在结帐之前删除 s 文件夹并将其链接到目标项目文件夹。

# In PowerShell (Windows)
New-Item -Type Junction -Path s -Target C:\projects\acme

# In Bash (Linux/MacOS)
ln -s ~/projects/acme s

这种方法的优点是您不必尝试为分散在您的管道和模板文件中的数十个内置任务覆盖工作文件夹;这是在管道顶部的一些设置,然后其余任务可以正常运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多