2017-04-05 52 views
1

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

  1. 这是一个问题,还是我太谨慎?
  2. 我可以使用哪些方法避免重复提取第三方库?

我们目前没有使用git submodules,但我不认为这会改变任何东西。

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

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

一个更清洁但较不优雅的解决方案是拥有一个独立的构建系统,用于更新我们项目构建使用的这些库的本地副本,从而避免构建过程中可能会污染这些第三方包。

任何更简单的选项?

+0

从长远来看,预先构建/缓存您的依赖关系副本的单独构建系统实际上可能会更好。您可以(1)阻止给定的依赖项更新(如果最新版本被破坏),(2)即使第三方回购处于脱机状态也可以构建您的副本,以及(3)如果您永远不得不确定你所依赖的依赖关系的哪个提交(例如,,如果发生许可变更)。 – Unsigned

回答

0

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

你也可以使用git子模块和抢只有最新提交的子模块 一样的,你会在混帐克隆使用,因为子模块是做一个git clne更新一次的。

--depth标志可以传递给子模块。
--depth标志的使用方式与克隆存储库时所用的相同,并且您希望仅克隆最新的提交。

--depth选项添加到git submodule的添加和更新命令中,然后将其传递给clone命令。
当子模块非常庞大时,这非常有用,而且除了最新的提交之外,您对其他任何内容都没有兴趣。

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

完整文档可以发现here