目錄
前言
伴隨着團隊的微服務越來越多,測試團隊也重視版本管理並要求 “所測即所得”,即SIT/UAT通過測試的二進制編譯包即是上線部署包,而非重新拉取代碼再打包。因此,要達到這個目標,開發這邊需要做兩個事情:
1、把配置從程序包中解耦。這塊不是這篇文章的重點,我後續會開另外一篇說一下如何通過使用攜程開源的配置中心Apollo進行解耦。(但是在2019GOPS上聽到去哪兒的效能總監說,自從去哪兒和攜程合併後內部也慢慢不用Apollo,而改用QConfig。)
2、編譯包要通過製品庫進行管理。目前用得比較多的是Nexus和Artifactory。因爲本人公司主要是用Nexus的,因此就用Nexus進行講解。
安裝
1、下載地址:https://www.sonatype.com/download-oss-sonatype (這裏我使用3.16.0版本進行演示)
2、解壓tar包並在解壓後會多了兩個文件夾
文件夾 | 作用 |
nexus-3.16.0-01 | 核心 |
sonatype-work | maven下載jar存放地址 |
[xxxx@localhost opt]# tar -zxvf /tmp/nexus-3.16.0-01-unix.tar.gz
nexus-3.16.0-01/.install4j/9d17dc87.lprop
nexus-3.16.0-01/.install4j/MessagesDefault
nexus-3.16.0-01/.install4j/build.uuid
nexus-3.16.0-01/.install4j/i4j_extf_0_17is1ik.utf8
.....
sonatype-work/nexus3/log/.placeholder
sonatype-work/nexus3/orient/plugins/studio.zip
sonatype-work/nexus3/tmp/.placeholder
[xxxx@localhost opt]# ls -alrt
total 0
dr-xr-xr-x. 17 root root 224 Mar 29 20:42 ..
drwxr-xr-x. 9 root root 163 Apr 12 22:59 nexus-3.16.0-01
drwxr-xr-x. 3 root root 20 Apr 12 22:59 sonatype-work
啓動服務
1、進入Nexus的bin文件夾並啓動服務。
[root@localhost nexus-3.16.0-01]# java -version
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost nexus-3.16.0-01]# ./bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
2、如有你想忽略該警告,可以通過修改nexus配置。
[root@localhost nexus-3.16.0-01]# vi bin/nexus
---------------------------------------------------------
# user to execute as; optional but recommended to set
#run_as_user=''
run_as_user=root
3、重啓
[root@localhost nexus-3.16.0-01]# ./bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
[root@localhost nexus-3.16.0-01]#
4、常見命令
bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
查看防火牆狀態
查看防火牆狀態 systemctl status firewalld
開啓防火牆 systemctl start firewalld
關閉防火牆 systemctl stop firewalld
開啓防火牆 service firewalld start
若遇到無法開啓
先用:systemctl unmask firewalld.service
然後:systemctl start firewalld.service
5、常見問題
5.1 即使nexus已經啓動成功,但是web端訪問還是報超時,一般情況就是端口沒有開放。
#查詢指定端口是否已開 (yes表示開啓;no表示未開啓)
firewall-cmd --query-port=666/tcp
#假若沒有開啓
#添加指定需要開放的端口:
firewall-cmd --add-port=666/tcp --permanent
#重載入添加的端口:
firewall-cmd --reload
#查詢指定端口是否開啓成功:
firewall-cmd --query-port=666/tcp
使用與配置
1、輸入http://localhost:8081/,登錄並顯示以下界面證明Nexus安裝並啓動成功。
2、使用admin/admin123進行登錄。
3、然後創建三種不同類型的倉庫(Hosted、Proxy、Group),每個倉庫的格式爲maven2或者maven1,同時倉庫還有一個Policy(策略)的屬性,它表示該倉庫爲發佈(Release)版本倉庫還是快照(Snapshot)版本倉庫。最後兩列的值爲倉庫的狀態和路徑。具體每種倉庫的描述可以參考以下表格。
值得注意的是,倉庫組所包含的倉庫的順序決定了倉庫組遍歷其所含倉庫的次序,因此最好將常用的倉庫放在前面,當用戶從倉庫組下載構件的時候,就能夠儘快地訪問到包含構件的倉庫。
種類 | 作用 |
---|---|
group(倉庫組類型) | 組倉庫,用於方便開發人員自己設定的倉庫 |
hosted(宿主類型) |
內部項目的發佈倉庫,一般用於內部開發人員發佈上去存放程序包的倉庫。其中根據版本分爲兩類: Release:用於版本發佈的倉庫 Snapshot:用於開發、調試、測試的倉庫 |
proxy(代理類型) | 從遠程中央倉庫中尋找數據的倉庫,一般用於從遠程拉取jar包 |
virtual(虛擬類型) | 虛擬倉庫,一般不怎麼用到 |
上傳構件包
1、配置pom.xml與setting.xml。
setting.xml:配置nexus私庫的登錄賬戶與密碼。
<server>
<id>release</id> <!--對應pom.xml的id=releases的倉庫-->
<username>XXXXX</username>
<password>YYYYYYYY</password>
</server>
<server>
<id>snapshot</id> <!--對應pom.xml中id=snapshots的倉庫-->
<username>XXXXX</username>
<password>YYYYYYYY</password>
</server>
pom.xml:用於配置
<distributionManagement>
<repository>
<!--id的名字可以任意取,但是在setting文件中的屬性<server>的ID與這裏一致-->
<id>release</id>
<!--指向倉庫類型爲host(宿主倉庫)的Release倉庫,這裏我倉庫爲team-release-->
<url>http://{ip}:{port}/repository/team-release/</url>
</repository>
<snapshotRepository>
<id>snapshot</id>
<!--指向倉庫類型爲host(宿主倉庫)的Snapshot倉庫,這裏我倉庫爲team-snapshot-->
<url>http://{ip}:{port}/repository/team-snapshot/</url>
</snapshotRepository>
</distributionManagement>
2、在項目的根目錄下執行以下命令:
mvn clean source:jar package
mvn deploy -e
3、當命令執行成功後會看到以下日誌:
另外:maven會判斷版本後面是否帶了-SNAPSHOT,如果帶了就發佈到snapshots倉庫,否則發佈到release倉庫。
4、通過日誌發現該源代碼包與程序包部署到nexus私服成功,並存到releas倉庫。我們到私服查看確認無誤。