本文由ilanniweb微信公衆號提供友情贊助,首發於爛泥行天下java
IT技術分享QQ羣:571981257linux
趁國慶有時間,恰好最近也想把目前的CI/CD中的CD方案從新調整優化下。git
原來咱們業務部署的方式,不管是生產環境仍是預發環境都是直接從git倉庫拉取代碼,maven編譯構建打包,而後經過ansible進行下一步的操做。web
這個過程基本上是沒有問題的,可是考慮到預發環境和生產環境使用的是同一套代碼,那麼咱們徹底能夠把在生產環境的CI和CD,直接修改成CD。也就說git倉庫拉取代碼,maven編譯構建打包,這兩個步驟徹底省略掉,直接使用預發環境的生成的構建產物進行部署。spring
除此以外,在作回滾發佈時,經過直接部署上次的構建產物這個也是最快的,最節省時間的。docker
因此最近要對該部署方案進行優化,其中一個很關鍵的點,就是如何處理構建後產物的。數據庫
目前業務代碼使用的是springboot架構進行開發,因此各個環境的配置文件都會被打包最終的jar包中。api
若是使用的是docker或者k8s部署業務的話,很好處理,咱們只須要把最終產物達成鏡像推送到docker倉庫,而後生產部署時,直接從docker倉庫拉取對應的docker鏡像進行部署便可。安全
若是沒有使用docker或者k8s部署業務的話,咱們可使用jfrog artifactory(如下文章簡稱jfrog)或者nexus3,這些二進制包管理工具,管理構建產物。在預發環境階段把生成的jar包,存放到jfrog。而後生產環境部署時,jenkins直接從jfrog中拉取對應的jar包便可。springboot
有關 nexus3的使用,我會在下一篇文章中進行介紹。
以上整個流程,我會分階段進行介紹,在此先介紹jfrog相關的知識點。
jfrog artifactory是一款二進制存儲管理工具,用來管理構建工具(如:maven、gradle)等所依賴的二進制倉庫,以方便管理第三方庫和發佈目標版本庫,從而提升軟件開發效率。它提供大量的插件以利於和不一樣工具之間的整合,內部使用權限管理更加安全,並支持高併發等等特性。
另外咱們搭建Artifactory私服的緣由還有:
私有倉庫的目的是做爲團隊內所使用的全部軟件構件的內部私有構件倉庫,將Maven構件(jar和pom)存儲到一個專門的Maven倉庫比將它們存儲到版本控制系統中更有優點,這是由於:
-->構件(jar)是二進制文件,不屬於git版本控制系統,後者在處理文本文件方面比較好
-->減小可能的版本衝突
-->減小首次構建時須要的手動干涉
-->中央倉庫包含全部依賴的軟件構件,引用單一的中央倉庫比引用多個獨立的本地庫要好
-->使用內部倉庫作clean構建時會快些,由於Maven構件是從內部服務器而不是從因特網上獲取
以上介紹來源與百度百科。
jfrog artifactory有企業版和開源版,兩個版本。對於咱們來講開源版本就夠使用了,因此下面的文章所有是以開源版本爲基準進行講解。
jfrog的運行須要jdk1.8以上版本支持,在此須要咱們首先配置jdk基礎環境。
下載jdk版本,並安裝,以下:
wget http://mirrors.linuxeye.com/jdk/jdk-8u221-linux-x64.tar.gz
tar -xf jdk-8u221-linux-x64.tar.gz -C /usr/local/
chown root:root -R /usr/local/jdk1.8.0_221
ln -s /usr/local/jdk1.8.0_221 /usr/local/jdk
ln -s /usr/local/jdk/bin/java /usr/bin/java
把jdk加入系統環境變量中,以下:
cat >> /etc/profile << "EOF"
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
EOF
使jdk環境變量生效,以下:
source /etc/profile
java -version
jfrog的安裝有兩種方式,第一種是經過zip包的方式進行安裝,第二種是經過yum或者rpm方式進行安裝。
在此咱們先介紹zip包方式的安裝,能夠經過以下網址查看zip包的相關信息:
https://bintray.com/jfrog/artifactory/jfrog-artifactory-oss-zip
使用wget命令進行下載,固然也可使用其餘命令,好比curl命令。
wget "https://bintray.com/jfrog/artifactory/download_file?file_path=jfrog-artifactory-oss-6.12.2.zip"
使用以下命令安裝jfrog:
unzip -q jfrog-artifactory-oss-6.12.2.zip -d /usr/local/
ln -s /usr/local/artifactory-oss-6.12.2/ /usr/local/jfrog
ls -al /usr/local/jfrog/
啓動jfrog,使用以下命令:
/usr/local/jfrog/bin/artifactoryctl start
ps -ef |grep jfrog
netstat -tunlp |grep 5256
經過上圖,能夠很明顯的看出jfrog已經正常啓動,而且也能夠看出jfrog默認監聽的是8081端口。
jfrog的主要目錄在此咱們作簡單的介紹,以下:
jfrog相關腳本文件存放路徑:/usr/local/jfrog/bin
jfrog日誌存放路徑:/usr/local/jfrog/logs/catalina
jfrog配置文件存放路徑:/usr/local/jfrog/etc
jfrog備份數據存放路徑:/usr/local/jfrog/backup
jfrog數據庫存儲路徑:/usr/local/jfrog/data/derby
其中/usr/local/jfrog/bin/目錄下的artifactoryctl是控制jfrog啓動、關閉的腳本
/usr/local/jfrog/bin/artifactoryctl start 表示開啓jfrog服務
/usr/local/jfrog/bin/artifactoryctl stop 表示關閉jfrog服務
/usr/local/jfrog/bin/installService.sh 表示把jfrog加入到系統服務,並開機啓動
/usr/local/jfrog/bin/uninstallService.sh 表示把jfrog服務從系統服務中刪除
若是沒有特殊配置的話,jfrog使用的是derby做爲其存儲數據的數據庫的。若是要使用其餘類型的數據庫做爲jfrog數據存儲的話,咱們能夠修改/usr/local/jfrog/etc/db.properties文件中的配置便可。
除上述外/usr/local/jfrog/data/filestore/目錄存放的都是上傳的構建產物文件,該文件不是以明文的形式存在,而是jfrog服務本身進行了相關處理。
可是該文件的md5值是保持不變的,也就說你上傳的jar是以另一種形式存在的。若是有須要,你能夠經過重命名該文件就能夠獲得你的jar包。
下面的截圖是一個示例,針對/usr/local/jfrog/data/filestore/目錄實例,以下:
PS:強烈建議直接使用zip包方式安裝jfrog。
在介紹完經過zip包方式安裝jfrog完畢後,咱們再來介紹下經過yum和rpm包方式安裝jfrog。
經過yum方式安裝jfrog,比較簡單。須要下載jfrog的yum倉庫源,而後進行安裝便可,以下:
wget -O /etc/yum.repos.d/frog-artifactory.repo https://bintray.com/jfrog/artifactory-rpms/rpm
cat /etc/yum.repos.d/frog-artifactory.repo
開始安裝jfrog,使用以下命令:
yum -y install jfrog-artifactory-oss
咱們能夠經過以下網址查看rpm包的相關信息:
https://bintray.com/jfrog/artifactory-rpms/jfrog-artifactory-oss-rpm
除上述地址以外,咱們還能夠經過如下地址查看相關信息:
https://bintray.com/jfrog/product/JFrog-Artifactory-Pro/view
https://www.jfrogchina.com/open-source/#artifactory2
https://jfrog.com/open-source/
https://jfrog.bintray.com/artifactory-rpms/
下載對應的rpm包,使用以下命令:
wget "https://bintray.com/jfrog/artifactory-rpms/download_file?file_path=jfrog-artifactory-oss-6.12.2.rpm" -O jfrog-artifactory-oss.rpm
開始安裝jfrog,使用以下命令:
yum -y install jfrog-artifactory-oss.rpm
使用以下命令查看jfrog的yum和rpm包安裝信息,以下:
rpm -qa |grep jfrog
rpm -ql jfrog-artifactory-oss
經過上圖,咱們能夠很明顯的看出jfrog有幾個主要的目錄:
/etc/opt/jfrog/artifactory
/opt/jfrog/artifactory
/var/opt/jfrog
有關這個幾個目錄的做用,能夠參考3.3章節的介紹,在此就不作進一步的介紹。
啓動jfrog服務,使用以下命令:
systemctl start artifactory.service
systemctl status artifactory.service
Jfrog安裝完畢,並啓動服務後,咱們就能夠經過http://ip:port訪問了。
jfrog默認的端口是8081,默認的用戶名和密碼是:admin/password。
經過上圖,咱們能夠很明顯的看出jfrog已經能夠正常對外提供服務。
jfrog服務啓動完畢,咱們登錄到web服務檯後,就能夠建立相關的倉庫了。
目前開源版本的jfrog只支持Gradle、ivy、maven、SBT、Generic等5種倉庫類型,若是你想要支持其餘類型的倉庫的話,可使用jfrog的企業版。以下:
在上傳文件以前,咱們先來建立一個倉庫,倉庫類型咱們選擇的是Generic,普通類型的倉庫,倉庫名稱爲testilanni。
具體建立步驟以下截圖:
經過上圖,咱們能夠很明顯的看出testlanni,這個Generic類型的倉庫,已經建立完畢。
jfrog對應的倉庫建立完畢後,咱們就能夠上傳文件到jfrog中。
咱們能夠經過兩種方式上傳文件到jfrog中,一種是經過web頁面,一種是經過api。下面一一進行介紹。
PS:須要注意下新上傳的文件,命名和jfrog倉庫中,在同一個倉庫同一個子目錄下時,若是已經存在一樣命名的文件,那麼新上傳的文件會覆蓋已經存在的文件。
咱們如今要把本地的user_web_upload.jar文件上傳到testilanni倉庫的user目錄下,而且該文件的大小超過100M。
在經過web頁面上傳文件以前,咱們還要修改jfrog的默認web頁面上傳文件大小的限制,由於jfrog默認經過web方式上傳文件的大小限制是100M。以下圖:
咱們只須要把上圖中的「File Upload Max Size」修改成指定的大小便可。在此咱們修改成0,表示不限制大小。以下:
上傳文件大小限制完畢後,咱們就能夠上傳文件了,操做步驟以下:
上圖中,我能須要注意「Target Path」選項,若是咱們不加子目錄的話,能夠不進行設置。若是是在子目錄下的話,這個就須要添加了。
上述是圖片是web端上傳成功後的顯示信息。
下面咱們來看下,新上傳的文件在jfrog頁面中顯示的信息,以下:
上述圖片中咱們能夠看到文件名、大小、建立時間、倉庫路徑、MD5值,以及SHA-1值,其中SHA-1值爲a0b97612c0a984aa365b6451778633f01a66bb18,MD5值爲b18217e8b51113884bcdab865f970b72。
SHA-1值爲上傳文件在jfrog中實際的物理文件名。以下圖:
經過web方式上傳文件介紹完畢後,咱們再來介紹經過api方式上傳文件。
經過api方式上傳文件比較簡單,咱們可使用curl命令發送PUT請求便可。命令以下:
curl -X PUT -u admin:password -T user_api_upload.jar "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"
注意上述圖中,上傳文件顯示的md5值,和文件的md5值是同樣。
如今咱們再登陸到web界面查看剛剛經過api上傳的文件,以下截圖:
經過上圖,咱們能夠很明顯的看出,全部相關的信息和經過api成功上傳後顯示的都是同樣的。
PS:須要注意下,經過API方式上傳的文件,若是該倉庫中沒有對應的子目錄,那麼jfrog會自動建立該子目錄,而後再上傳文件。
文件成功上傳到jfrog中後,咱們就能夠經過相關的工具或者命令下載文件。下面咱們就介紹經過curl和wget命令下載剛剛上傳的文件。
在下載文件以前,咱們能夠在web頁面查看所要下載的文件的url,以下:
jfrog官方默認是使用curl命令進行下載文件。以下:
curl -uadmin:password -O "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"
查看下載文件的md5值,使用以下命令:
md5sum user_api_upload.jar
把上述md5值與第8.1章節中jfrog web頁面上,該文件顯示的md5值對比能夠很明顯的發現,上傳後的文件和下載後的文件是同樣的,由於文件的md5值是同樣的。
固然咱們也能夠對下載的文件進行重命名,以下:
curl -uadmin:password -o user.jar "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"
wget命令下載文件和curl命令,差很少,下面我就直接使用該命令下載便可。
下載到當前目錄,使用以下命令:
wget --user=admin --password=password "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"
下載到當前目錄,並對對文件進行重命名:
wget --user=admin --password=password "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar" -O ./user.jar
爲了對jfrog的操做權限進行控制,在此咱們使用openldap接入用戶的統一管理。具體配置以下截圖:
LDAP URL中要填寫ldap的服務器地址以及base dn,以下:
ldap://ldap.ilanni.com:389/dc=ilanni,dc=com
Search Filter和Search Base要填寫(uid={0})和ou=People。
Manager DN和Manager Password要填寫ldap管理員的帳號和密碼,以下示例:
cn=root,dc=ilanni,dc=com和password
以上openldap配置完畢後,咱們來測試下剛剛的配置是否生效。以下:
經過上圖能夠很明顯的看出,openldap與jfrog的集成是沒有問題的,是成功的。
可是除了以上配置以外,咱們還須要激活該配置,以下:
PS:在這裏須要說明一點,開源版本的jfrog不支持ldap的用戶組,這個很坑。
ldap與jfrog的集成配置完畢後,咱們必須先使用ldap中的用戶登陸到jfrog web頁面,而後再退出這個用戶。
這樣管理員才能在jfrog的web頁面看到這個用戶,這個操做和gitlab ce版本很像,都是須要先登陸到系統,而後系統中才能看到該用戶。
在此咱們以ilanni這個用戶爲例,要求把ilanni用戶設置爲管理員,須要進行以下的操做。
ilanni用戶登陸到jfrog就不作演示,咱們直接進入權限配置模式。相關截圖以下:
通過以上設置ilanni用戶就已是jfrog的管理員,如今咱們使用ilanni用戶登陸的頁面,以下:
默認狀況下jfrog是不容許匿名下載以及訪問的,考慮到實際的狀況,咱們如今須要jfrog能夠匿名訪問。
相關配置據圖以下:
使用以下命令測試匿名下載功能:
wget "http://192.180.0.38:8081/artifactory/testilanni/user/user_web_upload.jar"
經過上圖能夠很明顯的看出,匿名用戶具備下載權限。
咱們再來看匿名瀏覽權限,以下截圖:
經過上圖咱們能夠很明顯的看出,如今匿名用戶也能夠瀏覽jfrog的相關資源。
在實際使用過程當中,咱們會獲取指定倉庫的全部已有的文件版本,咱們能夠經過api的方式來獲取。
由於要使用到jq工具,因此咱們首先要安裝jq工具,以下:
yum -y install jq
下面使用curl和jq命令,獲取testilanni倉庫下user目錄全部的jar包名稱,命令以下:
curl -s http://192.180.0.38:8081/artifactory/api/storage/testilanni/user | jq -r '.children[] |select(.folder==false) |.uri' |cut -d '/' -f 2
獲得全部jar包名稱,咱們就能夠後續的操做,好比與jenkins進行集成等。
到此有關jfrog的安裝與使用就已經所有結束。