gitlab CI有效地获取CI作业的依赖git repo

gitlab CI有效地获取CI作业的依赖git repo,gitlab,gitlab-ci,Gitlab,Gitlab Ci,我正在尝试设置一个CI作业,该作业要求依赖存储库与启用CI的存储库一起放置。所谓依赖,我的意思是我的主repo需要依赖repo中的代码,但两个repo之间没有构建或测试依赖关系 我在作业脚本中找到了使用此命令克隆依赖存储库的方法 git克隆https://gitlab-ci-token:${CI\u JOB\u TOKEN}@gitlab.mycompany.com/path\u to\u my/dependent\u repo.git 问题是,每次作业运行时,repo都是新克隆的,因为依赖的r

我正在尝试设置一个CI作业,该作业要求依赖存储库与启用CI的存储库一起放置。所谓依赖,我的意思是我的主repo需要依赖repo中的代码,但两个repo之间没有构建或测试依赖关系

我在作业脚本中找到了使用此命令克隆依赖存储库的方法

git克隆https://gitlab-ci-token:${CI\u JOB\u TOKEN}@gitlab.mycompany.com/path\u to\u my/dependent\u repo.git

问题是,每次作业运行时,repo都是新克隆的,因为依赖的repo相当大,这需要花费很长的时间

有没有一种方法可以像GitLab CI获取自己的repo(CI将针对其运行)一样高效地“获取”依赖的repo,基本上执行拉取而不是克隆


我应该使用缓存吗?

如果有一个主回购依赖于几个其他回购,我会将它们作为子模块添加。这使得在GitLab中处理变得更容易,您的同事也可以轻松找到为这些repo克隆所需的正确版本。如果您有一些特定的需求,不需要将这些作为子模块,那么我理解

在GitLab中,有几种不同的处理方法。最简单的方法是使用
GIT\u策略
变量:

您可以将其设置为
fetch
,如下所示:

my_job:
  variables:
    GIT_STRATEGY: fetch
  script:
    - echo test
然后GitLab将尝试重用现有的工作目录,而不是总是克隆一个新目录

我自己也遇到过这样的情况,当时我为git clone使用了一个名为
--reference
:

它有一些非常奇怪的特殊情况,你必须考虑。该标志的作用是git使用存储库的本地副本并从该副本复制对象,而不是总是从网络复制。在某些情况下,这可以大大加快克隆操作的速度

除了这些建议之外,GitLab还有一个页面,上面有他们处理大型存储库的建议: