我正在尝试设置一个CI作业,该作业要求将依赖的存储库放在要启用CI的存储库旁边。依赖,我的意思是我的主仓库需要依赖仓库中的代码,但是两个仓库之间没有构建或测试依赖
我找到了一种在作业脚本中使用此命令克隆从属存储库的方法
git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.mycompany.com/path_to_my/dependent_repo.git
问题在于,每次作业运行时都会重新克隆存储库,因为从属存储库很大,这会花费很长时间。
有没有一种方法可以像GitLab CI一样高效地“提取”相关的仓库(针对CI将运行的仓库),基本上执行拉取而不是克隆?
我应该使用缓存吗?
答案 0 :(得分:0)
如果您有一个依赖于其他几个仓库的主仓库,我会将它们添加为子模块。这使得在GitLab中更容易处理,并且您的同事可以轻松找到他们需要为这些存储库克隆的正确版本。如果您有一些特殊的需要不要将它们作为子模块,那么我理解了!
在GitLab中,有几种不同的处理方法。最简单的方法是使用GIT_STRATEGY
变量:
https://docs.gitlab.com/ee/ci/yaml/#git-strategy
您可以这样将其设置为fetch
:
my_job:
variables:
GIT_STRATEGY: fetch
script:
- echo test
GitLab然后将尝试重用现有的工作目录,而不是始终克隆一个新目录。
当我使用名为--reference
的git clone标志时,我自己遇到了一个案例:
https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---reference-if-ableltrepositorygt
您需要考虑一些非常奇怪的特殊情况。该标志的作用是git使用存储库的本地副本并从该副本库复制对象,而不是始终从网络复制。在某些情况下,这可以大大加快克隆操作的速度。
除了这些建议,GitLab还提供了一个页面,其中包含处理大型存储库的建议: