工欲善其事,必先利其器 ——DevOps中如何管理工具包
作為DevOps交付流水線的開發(fā)者,為支持CI/CD中各項任務(wù)的自動化,都需要依賴多種包管理工具來下載各種相關(guān)的工具,比如針對產(chǎn)生最終交付件的構(gòu)建過程,就需要在構(gòu)建流程的第一步,自動地把相關(guān)工具,如Curl、wget、Maven、Gradle、npm等等,下載到CI
服務(wù)器。這些工具的下載,通常都需要依靠對應(yīng)的公網(wǎng)服務(wù)器和包管理工具來支持。而這樣通過公網(wǎng)來下載工具,有時會遇到穩(wěn)定性的問題,也就是所謂的環(huán)境問題,導(dǎo)致工具下載失敗,進(jìn)而導(dǎo)致構(gòu)建任務(wù)的失敗。因此,我們需要引入新的技術(shù)來克服這些問題,保證工具包下載的穩(wěn)定和可靠。
二、工具包管理的痛點——缺乏穩(wěn)定性
通常,我們會使用各種各樣的包管理工具來幫助我們下載和管理這些工具包,如Windows上的Chocolatey,Mac/Linux上的Homebrew,還有npm、Yum、Debian、Docker等等。可是,有時我們通過這些包管理工具來下載工具包時,會碰到意外的5xx服務(wù)器錯誤。而更多的時候,通過這些包管理工具來下載會非常的慢。這些問題在我們使用自動化構(gòu)建工具(如Travis CI、Jenkins、Gitlab CI,等等)來實現(xiàn)持續(xù)集成CI的時候,會被成千上百倍地放大。一種解決辦法就是在碰到這些環(huán)境問題時,通過手動運行構(gòu)建的方式進(jìn)行補救,當(dāng)然,這只是指標(biāo)不治本。同時,在網(wǎng)絡(luò)訪問有限制的時候,如很多金融企業(yè)都會采用的網(wǎng)絡(luò)隔離,根本不可能去下載這些公網(wǎng)服務(wù)器上的工具包。
三、解決方案——使用JFrog Artifactory的遠(yuǎn)程倉庫
JFrog Artifactory作為全語言制品倉庫,其遠(yuǎn)程倉庫可以作為公網(wǎng)服務(wù)器的本地代理和緩存。當(dāng)我們通過其遠(yuǎn)程倉庫來下載所需的工具包時,Artifactory首先檢查在本地的緩存中是否已經(jīng)存在。如果有,直接返回該工具包;如果沒有,Artifactory將會代理到公網(wǎng)服務(wù)器去下載相應(yīng)的工具包,并緩存到本地,以供后續(xù)的下載使用。
利用Artifactory的遠(yuǎn)程倉庫作為下載前述工具包的代理和緩存,能夠使得DevOps流程中的各個環(huán)節(jié),如前面描述的持續(xù)集成流程,更加的迅速和穩(wěn)定。在有網(wǎng)絡(luò)隔離要求的環(huán)境中,如金融企業(yè)的研發(fā)/生產(chǎn)環(huán)境,Artifactory可以幫助技術(shù)人員建立自己的企業(yè)級單一可信源。
下面,我們將通過示例為大家一一展示,Artifactory的遠(yuǎn)程倉庫是如何為不同種類的工具包提供服務(wù)的。
四、示例一——Chocolatey
當(dāng)使用Choco為Windows系統(tǒng)下載Gradle的時候,我們經(jīng)常會碰到類似下面這樣的503錯誤,從而導(dǎo)致構(gòu)建失敗:
解決的方法:我們在Artifactory里定義一個Nuget類型的遠(yuǎn)程倉庫,利用它作為通過Choco包管理工具下載的來源。
第一步:配置Artifactory遠(yuǎn)程倉庫
在Artifactory里創(chuàng)建一個Nuget類型的遠(yuǎn)程倉庫,其主要參數(shù)如下:
· Url:
https://chocolatey.org
choco install <package-name> -s <artifactory-url>/api/nuget/choco
choco install <package-name> -s <artifactory-url>/api/nuget/choco
-u <artifactory-user> -p <artifactory-password>
五、示例二——Homebrew
和Chocolatey類似,也可以用Artifactory來支持Brew的下載:
第一步:配置Artifactory遠(yuǎn)程倉庫
在Artifactory里創(chuàng)建通用(Generic)類型的遠(yuǎn)程倉庫:
· Url:
https://homebrew.bintray.com
第二步:設(shè)置“HOMEBREW_ARTIFACT_DOMAIN”環(huán)境變量
set HOMEBREW_ARTIFACT_DOMAIN=<artifactory-url>/homebrew
set HOMEBREW_ARTIFACT_DOMAIN=<artifactory-user>:<artifactory-password>@<artifactory-url>/homebrew
之后再通過 brew install命令安裝,就會訪問Artifactory的本地緩存了。
六、示例三——Yum
本節(jié)將介紹如何利用Artifactory的遠(yuǎn)程倉庫來使用Yum下載RPM包。
第一步:配置Artifactory遠(yuǎn)程倉庫
在Artifactory里創(chuàng)建一個RPM類型的遠(yuǎn)程倉庫:
· Url:http://mirror.centos.org/centos/<version>/os/<architecture>
o 例如:http://mirror.centos.org/centos/7.6.1810/os/x86_64
創(chuàng)建下述文件:/etc/yum.repos.d/artifactory
[artifactory]HERE
name=artifactory
baseurl=https://<artifactory-url>/yum
· 帶用戶認(rèn)證時,文件內(nèi)容為:
[artifactory]
name=artifactory
baseurl=https://<artifactory-user:<artifactory-password>@<artifactory-url>/yum
之后正常使用yum命令就可以從Artifactory的本地緩存下載RPM包了。
七、示例四——Docker
本節(jié)將介紹如何利用Docker命令從Artifactory的遠(yuǎn)程倉庫來下載Docker鏡像。
第一步:配置Artifactory遠(yuǎn)程倉庫
在Artifactory里創(chuàng)建Docker類型的遠(yuǎn)程倉庫:
· Url:
https://registry-1.docker.io/
用下述命令登錄Artifactory的Docker倉庫:
Docker login <your docker domain>
其中<your docker domain>的寫法可以參考Artifactory中docker倉庫對應(yīng)的”Set Me Up”顯示的設(shè)置。
執(zhí)行下述命令,從Artifactory的緩存拉取Docker鏡像:
docker pull <your docker domain>/<docker image>:<docker tag>
當(dāng)然,針對Docker應(yīng)用,你可以使用JFrog提供的免費版鏡像中心——JCR(JFrog Container Registry,https://jfrog.com/container-registry/),來管理自己的Docker鏡像。
八、總結(jié)
在DevOps流程當(dāng)中,我們需要下載很多工具包,來支持整個流程的自動化運轉(zhuǎn)。然而。直接從外網(wǎng)下載這些工具包,經(jīng)常會碰到環(huán)境問題,進(jìn)而影響整個DevOps流程的效率和可靠性。
Artifactory通過其遠(yuǎn)程倉庫的設(shè)置和全語言制品支持的能力,能夠幫助我們建立各種工具包的本地源,從而使得DevOps的流程更加迅速和穩(wěn)定。本文還列出了幾種典型類型工具包的配置方法。
微信搜索公眾號:jfrogchina 獲取課程通知