通过减少结帐时间提高 Azure 管道性能

Pau*_*ugt 5 git azure-devops azure-pipelines

我们已经使用 azure devops 一段时间了,我们在存储库中有一个非常大的套件,有一个广泛的 yaml 管道。它有各种并行作业,我们有多个托管代理可用于并行运行这些作业。为了加快构建速度,我进行了各种优化(例如缓存 nuget 包)。但是,由于我们的存储库的大小,管道作业甚至在开始任何任务之前运行大约 2 分半钟,因为它正在运行检出任务以将源获取到托管代理。

我们可能在项目开始时向存储库添加了一些不需要的大文件,这可能导致存储库有点膨胀。我找到了一些关于如何从存储库中删除大文件的文档,但该文档对此非常模糊。这是尝试改善结帐时间的正确方法吗?如果是这样,是否有人可以详细说明如何从 git 存储库中删除不需要的文件并将其推送到 azure devops?

如果我可以做任何其他事情来提高结帐速度(除了使用私人代理),我愿意接受想法

dan*_*orn 10

结帐行为可以通过checkout关键字自定义。特别是可以指定fetchDepth(默认为无限制)进行浅提取,这可以提高性能。

来自浅取的 Azure devops 文档:

如果您的存储库很大,此选项可能会使您的构建管道更高效。如果您的存储库已经使用了很长时间并且具有相当大的历史,它可能会很大。如果您添加并随后删除了大文件,它也可能很大。

Yaml 管道示例:

steps:
- checkout: self
  clean: true
  fetchDepth: 1 # Fetch only one commit
  path: PutMyCodeHere
Run Code Online (Sandbox Code Playgroud)

有关如何在 yaml 管道中指定 fetchDepth 的Azure Devops 文档

  • 不,只要您只与当前提交交互(构建中通常是这种情况),就没有任何缺点。例如,您不能做的是显示 git 历史记录,或者针对其他提交或分支进行签出或比较。(与之前的提交相比,可以通过指定“fetchDepth:2”轻松解决,但是要与任意提交或分支进行签出或比较,您必须克隆整个存储库,但这些不是通常在构建中完成的操作。 (2认同)

Mak*_*toE 10

除了已接受的答案之外,fetchTags如果您的存储库有很多标签并且您的管道中不需要它们,您可能会发现有很大帮助。

虽然我们的结帐步骤仅花费了 6 分钟fetchDepth: 1,但当我们添加 时fetchTags: false,克隆步骤减少到 30 秒。我们的结账步骤现在看起来像这样。

  - checkout: self
    fetchDepth: 1
    fetchTags: false
Run Code Online (Sandbox Code Playgroud)

注意:较新的存储库默认为fetchTags: false. (来源