工欲善其事,必先利其器 ——DevOps中如何管理工具包

JFrog傑蛙科技發表於2020-04-01
一、背景
作為DevOps交付流水線的開發者,為支援CI/CD中各項任務的自動化,都需要依賴多種包管理工具來下載各種相關的工具,比如針對產生最終交付件的構建過程,就需要在構建流程的第一步,自動地把相關工具,如Curl、wget、Maven、Gradle、npm等等,下載到CI伺服器。這些工具的下載,通常都需要依靠對應的公網伺服器和包管理工具來支援。而這樣透過公網來下載工具,有時會遇到穩定性的問題,也就是所謂的環境問題,導致工具下載失敗,進而導致構建任務的失敗。因此,我們需要引入新的技術來克服這些問題,保證工具包下載的穩定和可靠。

二、工具包管理的痛點——缺乏穩定性

通常,我們會使用各種各樣的包管理工具來幫助我們下載和管理這些工具包,如Windows上的Chocolatey,Mac/Linux上的Homebrew,還有npm、Yum、Debian、Docker等等。可是,有時我們透過這些包管理工具來下載工具包時,會碰到意外的5xx伺服器錯誤。而更多的時候,透過這些包管理工具來下載會非常的慢。這些問題在我們使用自動化構建工具(如Travis CI、Jenkins、Gitlab CI,等等)來實現持續整合CI的時候,會被成千上百倍地放大。一種解決辦法就是在碰到這些環境問題時,透過手動執行構建的方式進行補救,當然,這只是指標不治本。同時,在網路訪問有限制的時候,如很多金融企業都會採用的網路隔離,根本不可能去下載這些公網伺服器上的工具包。

三、解決方案——使用JFrog Artifactory的遠端倉庫

JFrog Artifactory作為全語言製品倉庫,其遠端倉庫可以作為公網伺服器的本地代理和快取。當我們透過其遠端倉庫來下載所需的工具包時,Artifactory首先檢查在本地的快取中是否已經存在。如果有,直接返回該工具包;如果沒有,Artifactory將會代理到公網伺服器去下載相應的工具包,並快取到本地,以供後續的下載使用。
利用Artifactory的遠端倉庫作為下載前述工具包的代理和快取,能夠使得DevOps流程中的各個環節,如前面描述的持續整合流程,更加的迅速和穩定。在有網路隔離要求的環境中,如金融企業的研發/生產環境,Artifactory可以幫助技術人員建立自己的企業級單一可信源。
下面,我們將透過示例為大家一一展示,Artifactory的遠端倉庫是如何為不同種類的工具包提供服務的。

四、示例一——Chocolatey

當使用Choco為Windows系統下載Gradle的時候,我們經常會碰到類似下面這樣的503錯誤,從而導致構建失敗:
工欲善其事,必先利其器 ——DevOps中如何管理工具包

解決的方法:我們在Artifactory裡定義一個Nuget型別的遠端倉庫,利用它作為透過Choco包管理工具下載的來源。
第一步:配置Artifactory遠端倉庫
在Artifactory裡建立一個Nuget型別的遠端倉庫,其主要引數如下:
· 倉庫名:choco
· Url:
第二步:安裝Choco包
· 用匿名安裝的命令
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遠端倉庫
在Artifactory裡建立通用(Generic)型別的遠端倉庫:
· 倉庫名:homebrew
· Url:
第二步:設定“HOMEBREW_ARTIFACT_DOMAIN”環境變數
· 匿名訪問:
set HOMEBREW_ARTIFACT_DOMAIN=<artifactory-url>/homebrew
· 帶使用者認證的訪問:
set HOMEBREW_ARTIFACT_DOMAIN=<artifactory-user>:<artifactory-password>@<artifactory-url>/homebrew
第三步:安裝
之後再透過  brew install命令安裝,就會訪問Artifactory的本地快取了。

六、示例三——Yum

本節將介紹如何利用Artifactory的遠端倉庫來使用Yum下載RPM包。
第一步:配置Artifactory遠端倉庫
在Artifactory裡建立一個RPM型別的遠端倉庫:
· 倉庫名:yum
· Url:
o 例如:
第二步:建立yum的配置
建立下述檔案:/etc/yum.repos.d/artifactory
· 匿名訪問時,檔案內容為:
[artifactory]HERE name=artifactory
baseurl=
enabled=1 gpgcheck=0
· 帶使用者認證時,檔案內容為:
[artifactory] name=artifactory
baseurl=
enabled=1 gpgcheck=0
之後正常使用yum命令就可以從Artifactory的本地快取下載RPM包了。

七、示例四——Docker

本節將介紹如何利用Docker命令從Artifactory的遠端倉庫來下載Docker映象。
第一步:配置Artifactory遠端倉庫
在Artifactory裡建立Docker型別的遠端倉庫:
· 倉庫名:docker
· Url:
第二步:登入
用下述命令登入Artifactory的Docker倉庫:
Docker login <your docker domain>
其中<your docker domain>的寫法可以參考Artifactory中docker倉庫對應的”Set Me Up”顯示的設定。
第三步,拉取映象
執行下述命令,從Artifactory的快取拉取Docker映象:
docker pull <your docker domain>/<docker image>:<docker tag>
當然,針對Docker應用,你可以使用JFrog提供的免費版映象中心——JCR(JFrog Container Registry,),來管理自己的Docker映象。

八、總結

在DevOps流程當中,我們需要下載很多工具包,來支援整個流程的自動化運轉。然而。直接從外網下載這些工具包,經常會碰到環境問題,進而影響整個DevOps流程的效率和可靠性。
Artifactory透過其遠端倉庫的設定和全語言製品支援的能力,能夠幫助我們建立各種工具包的本地源,從而使得DevOps的流程更加迅速和穩定。本文還列出了幾種典型型別工具包的配置方法。
更多精彩內容可以專注我們的線上課堂
微信搜尋公眾號:jfrogchina 獲取課程通知


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2683928/,如需轉載,請註明出處,否則將追究法律責任。

相關文章