2017-04-05 29 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