如何避免在CI版本中重复克隆第三方git仓库

时间:2017-04-05 01:07:28

标签: git amazon-web-services aws-codebuild

我已经开始使用AWS CodeBuild来构建存储在AWS CodeCommit中的项目。 我们的项目依赖于几个第三方库,大部分是作为Git检索的,有些是HTTP。 我们的构建脚本克隆/下载并提取所需的库(与我们在本地构建的开发系统上的方式相同)。我担心的是,如果我们每天进行多次提交,CodeBuild会反复从第三方进行克隆/下载。这似乎很浪费,我并不关心我们的成本/带宽,但随着越来越多的人依赖这些第三方库,他们的带宽/成本将显着增加。我想避免这种情况。

  1. 这是一个问题,还是我太谨慎了?
  2. 我可以使用哪些方法来避免反复拉动第三方库?
  3. 我们目前没有使用git子模块,但我认为这不会改变任何内容。

    我可以使用git clone --depth 1 --shallow-submodules来减少第三方存储库的负载。

    我最好的解决方案是在每次构建结束时打包第三方库,将它们存储在S3上,然后获取下一个构建,解压缩它,然后执行git pull来检查更新。

    更简洁但更不优雅的解决方案是拥有一个单独的构建系统来更新我们的项目构建所使用的那些库的本地副本,这避免了我们的构建过程中任何第三方软件包被污染的可能性。

    任何更简单的选项?

1 个答案:

答案 0 :(得分:1)

  

我可以使用git clone --depth 1 --shallow-submodules来减少第三方存储库的负载。

您也可以使用git子模块并仅获取子模块的最新提交 与你在git clone中使用的相同,因为子模块在更新后正在执行git clne。

  

可以将--depth标志传递给子模块   可以使用--depth标志,就像在克隆存储库时使用它一样,并且您希望仅克隆最新的提交。

     

--depth选项添加到git submodule的添加和更新命令,然后将其传递给克隆命令。
  当子模块很大并且你对除了最新提交之外的任何东西都不感兴趣时​​,这很有用。

git submodule add --depth 1 -- <url>
git submodule update --depth -- <url>

可以找到完整的文档here