一千萬個為什麽

搜索

編譯器應該保存在神器中嗎?



我們正在AWS中建立我們的源代碼並構建系統。我們將有兩個持久虛擬機承載源和artifactory。我們有一堆編譯器(幾個Gig),我們希望通過NFS可用,這是應該在artifactory中托管的東西嗎?

我正在尋找'最佳實踐'的答案。我找不到關於這背後的想法的很多信息所以任何鏈接將不勝感激。

轉載註明原文: 編譯器應該保存在神器中嗎?

一共有 3 個回答:

使用Artifactory(或任何其他二進制存儲庫管理器)而不是傳統文件存儲(在您的情況下為NFS)有幾個主要原因。

  1. 管理工件版本的能力
  2. 跨基礎架構訪問工件的中央位置(您使用NFS完成的工作)
  3. 下載/重新創建以前版本的構件的能力(您也可以使用git/svn庫,但它會包含更多與二進制工件無關的元數據,而不會對用戶有用) LI>
  4. 您想控制訪問存儲的構件的用戶/權限

如果這些都不適用於你的用例,那麽我會說Artifactory會過度殺傷,而創建和維護它的努力不會超出你從它那裏得到的價值。雖然我過去使用它,但它是一個很好的工具,它的目標是完成:)

在許多情況下,編譯器按原樣使用,已由第三方包裝。在更改編譯系統的結構時,通常會將編譯器轉換為不同的版本,但也是預先打包的。如果這是您的用例,則工件存儲庫提供了單一優勢:可用性。即使提供者決定(無論出於何種原因)中止版本 - 您仍然擁有版本庫中的副本。

但是,如果編譯器在沒有版本更改的情況下收到任何更新,或者您進行任何類型的自定義 - 即使它只是在不觸及任何代碼的情況下構建它們 - 您希望將這些特定版本存儲在工件中,以便能夠隨時可靠地獲取它們。

附註:您使用編譯器時會如何影響構建的性能,特別是在編譯時間可能需要幾個小時的非常大的項目中。您必須分析構建的結構和/或使用模式,以確定是否值得進行優化,如果是,則需要在哪個方向進行優化。

直接從NFS調用編譯器很方便 - 構建服務器上只需要很少的配置。但是,大型構建的性能對NFS服務器本身以及將其連接到構建服務器的網絡的NFS性能非常敏感。一些工件可能有直接的NFS支持。您必須衡量切換到此類服務的影響,在某些情況下,使用專用NFS服務器可能仍然會更好。或者可能切換到包含本地安裝的編譯器的VM映像。

一個可能適合您的方案的解決方案是環境模塊。鑒於您只需要Linux上的編譯器,並且可以通過網絡共享(nfs/Samba)進行訪問。要將工具鏈加載到終端中,只需鍵入

module load gcc

並讓自動填充填寫版本號。它基本上是Python對任何Linux程序/工具鏈/ SDK的virtualenv。我已廣泛使用它,可以熱烈推薦這個工具。

Each compiler would have their own folder which is subdivided by version which allows you to have direct access to all versions. Configuration is defined server-side with PATH and other environment variables. User-side, a bash script has to be installed into users’ .bashrc