如何基於Artifactory搭建私服?
- 2020 年 3 月 26 日
- 筆記
寫Java的同學,基本都聽過Maven私服一詞,而對於不熟悉Java的同學來說,可能會以為這是某個網遊私服。的確,私服這個由歷史原因傳下來的概念,字面意思並不是太好理解,而且近年也有逐漸擴散到其他技術中的跡象。
包管理器
我們說的私服,其實指的是企業區域網內的軟體包依賴庫。
說到軟體庫,就會牽扯出另一個概念——包管理器。
包管理器是在電腦中自動安裝、配置、卸載和升級軟體包的工具組合。包管理器由於其便捷性,被越來越多的新技術所採納,從老一代的rpm、dpkg、maven,到中生代的npm、pypi、nuget,再到新生代的helm chart等,都屬於包管理器。
包管理器為了實現軟體包的自動升級和安裝配置,一般會有幾種類型的倉庫:本地倉庫、遠程倉庫/代理倉庫、虛擬倉庫。
倉庫類型
01
本地倉庫
本地倉庫是在需要使用包管理工具的電腦上產生,一般會由包管理工具自動生成,需要注意的是,我們下文指的本地倉庫是伺服器本地,跟開發者電腦的本地不同。
02
遠程倉庫/代理倉庫
遠程倉庫/代理倉庫一般指中央倉庫、大型機構搭建的中央倉庫鏡像站,比如:清華鏡像站、中科大鏡像站,或疊加多個倉庫內容的聚合型倉庫,比如:阿里的maven倉庫。虛擬倉庫即聚合型倉庫,把多個倉庫的內容聚合在一起對外提供服務。
私服就是在企業內部搭的至少包含一個本地倉庫和一個遠程倉庫的虛擬倉庫。
本地倉庫的作用是實現企業內部的包發布,發布後才能給其他團隊共享;遠程倉庫/代理倉庫的作用則是可以拉取到互聯網上完整的依賴包。
一般的私服工具還具備快取功能,同一個包的第二次拉取會直接從私服上拿,避免頻繁的低速互聯網訪問(很多中央倉庫都是國外的網站)。
03
虛擬倉庫
虛擬倉庫的作業則是統一提供給開發人員使用,通過虛擬倉庫的地址,不僅可以獲取互聯網上完整的依賴包,還可以獲取企業內其他團隊開發的組件。對於網路隔離比較嚴格的企業來說,私服一般需要搭建在DMZ區才能滿足以上的需求。
搭建Maven私服
接下來介紹基於Artifactory搭建Maven私服,其他類型的倉庫比如NPM、PyPI等,依此類推。
用管理員許可權的帳號登錄Artifactory之後,可以看到Admin菜單下Repositories有Local、Remote、Virtual三種倉庫類似,分別對應前面介紹的三種倉庫。

進入Local倉庫,New一個Maven類型的倉庫,編輯頁面有不少欄位,必填的就一個Repository Key,為了好區分多個倉庫,名字取maven-local,其他欄位採用默認的即可。

接著切到Remote倉庫,New一個Maven類型的遠程倉庫,必填的欄位是Repository Key和RUL,Repository Key根據遠程倉庫標準進行命名,URL填一個中央倉庫或中國的鏡像站(網上都可以搜到),點擊Test按鈕確保網路是通的且遠程倉庫是正確的,保存即可。

最後切到Virtual倉庫,New一個Maven類型的虛擬倉庫,需要做的事情就是填一個Repository Key,同時把前面建的兩個倉庫加入到該虛擬倉庫中。

最後切到Virtual倉庫,New一個Maven類型的虛擬倉庫,需要做的事情就是填一個Repository Key,同時把前面建的兩個倉庫加入到該虛擬倉庫中。

至於如何發布包,Artifactory提供手工上傳的功能,即上圖的Deploy按鈕,但是這種做法並不常見,更多的時候我們還是通過程式碼或指令來發布包。
那麼問題來了,如何通過程式碼或指令來發布包呢?其實,私服只是個工具,它並不會影響包管理器的使用方式,原來怎麼發布的,用上私服後還是一樣的發布方式,變化的只是目標地址而已,過程不變。