1. Nexus3介紹
nexus 作為一款優秀的倉庫管理工具,不僅默認支持maven、docker、npm、yum、apt等多種倉庫的配置。nexus3 最新的還新增了store隔離存儲功能,通過UI創建不同的store為repo指定不同的存儲空間,達到物理隔離。
幫助文檔
目錄結構說明
nexus 安裝目錄
├── LICENSE.txt
├── NOTICE.txt
├── bin 此目錄包含nexus的啟動腳本和與啟動相關的配置文件,其中的nexus文件是nexus的啟動文件。
├── deploy
├── etc 配置文件目錄。
├── lib 依賴庫目錄。
├── public 公共資源目錄。
├── system 此目錄包含構成nexus的所有組件和插件。
sonatype-work 數據目錄
├── nexus3
│ ├── blobs 沒有使用絕對路徑定義的所有基於文件系統的blob存儲的父目錄。
│ ├── cache 此目錄包含當前緩存的karaf軟件包的信息。
│ ├── db 此目錄包含OrientDB數據庫,是repository manager元數據的主要存儲。
│ ├── elasticsearch 此目錄包含elasticsearch的當前配置狀態。
│ ├── etc 此目錄包含了repository manager的主要運行時的配置。在配置運行時環境中這些文件被進一步補充說明了。
│ ├── generated-bundles
│ ├── instances
│ ├── karaf.pid
│ ├── health-check
│ ├── keystores 用於識別repository manager自動生成的秘鑰。
│ ├── lock
│ ├── log 日志文件存放的目錄。
│ ├── orient
│ ├── port
│ ├── restore-from-backup
└── └── tmp 臨時存儲目錄。
2. Sonatype Nexus Repository Manager
在右上角點擊“Sign In”的登錄按鈕,輸入admin/admin123,登錄成功
2.1. Browse Server Content
2.1.1 Browse Server Content -- Search
類似於Maven倉庫上的搜索功能,就是從私服上查找包,支持模糊搜索的
2.1.2 Browse Server Content -- Browse
2.1.3 Browse Server Content -- Upload
顧名思義就是上傳jar包到私服中,可以選擇其中一個hosted倉庫。
注意:通過頁面直接上傳的方式只是上傳了jar包,若這個jar通過Maven依賴了其他jar,那其他項目在下載這個jar時無法取得它的依賴。所以,除非這個jar沒有任何依賴,否則還是推薦通過命令行或者IDE的方式上傳jar包,這樣才會把pom一並上傳。
2.2 Repository
2.2.1 Repositories
倉庫分為三種:Proxy、hosted、group
【Proxy】
代理倉庫,當PC訪問中央庫的時候,先通過Proxy下載到Nexus倉庫,然后再從Nexus倉庫下載到PC本地。
這樣的優勢只要其中一個人從中央庫下來了,以后大家都是從Nexus私服上進行下來,私服一般部署在內網,這樣大大節約的寬帶。
創建Proxy的具體步驟
- 點擊左上角的“Create Repositories”按鈕
- 選擇要創建的類型,可以選擇maven2(hosted)。
- 填寫詳細信息(Nexus默認遠程倉庫響應慢,而且經常連不上。可以添加阿里雲代理倉庫)
Name:aliyun
Remote Storage:http://maven.aliyun.com/nexus/content/groups/public
Blob Store:選擇代理下載包的存放路徑
- 選中倉庫組 Public Repositories,把 Aliyun Repository 從 Availiable Repositories 中拖到Ordered Group Repositories中,放在Central上邊。保存
【Hosted】
Hosted是宿主機的意思,用於將第三方的Jar或者我們自己的jar放到私服上。
Hosted有三種方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已經發布的Jar包
Snapshot: 未發布的版本
Mixed:混合的
Hosted的創建和Proxy類似,類型需選擇maven2(hosted)。
注意:Deployment Pollcy,我們需要把策略改成“Allow redeploy”,以允許重復發布覆蓋同版本的jar包。
【Group】
能把多個倉庫合成一個倉庫來使用,把上幾步創建的代理倉庫和宿主倉庫都加入到“maven-public”倉庫組中:
2.2.2 Blob Stores
文件存儲的地方,創建一個目錄的話,對應文件系統的一個目錄。
如果眾多項目放在一個blob中,將會導致其非常巨大,所以對於不同的repository建議創建自己的blob。
2.2.3 Content Selectors
2.2.4 Cleanup Policies
2.2.5 Routing Rules
2.3 Security
Nexus是基於權限做訪問控制的,服務器的每一個資源都有對應的權限來控制,因此用戶執行特定的操作時就必須擁有必要的權限。管理員必須以角色的方式將權限賦予Nexus用戶。用戶可以被賦予一個或者多個角色,角色可以包含一個或多個權限,角色還可以包含一個或者多個其他角色
包含用戶、角色、權限的配置。
2.3.1 Privileges--Manage privileges
2.3.2 Roles--Manage roles
2.3.3 Users--Manage users
2.3.4 Anonymous--Browse server contents without authenticating
2.3.5 LDAP--Manage LDAP server configuration
2.3.6 Realms--Manage the active security realms and their order
2.3.7 SSL Certificates--Manage trusted SSL certificates for use with the Nexus truststore
2.4 Support
包含日志及數據分析。
2.4.1 Logging
2.4.2 Metrics
2.4.3 Status---System status checks
2.4.4 Support ZIP
2.4.5 System Information
2.5 System
包含API(Nexus這個API文檔貌似是用swagger做的)、郵件服務器,設置調度任務等。
https://help.sonatype.com/repomanager3/rest-and-integration-api
3. 將本地庫批量導入到Nexus3.x上(Maven私服)
問題描述
(1)由於公司內網的 Nexus 私服倉庫不能聯網,本地倉庫已經有很多的 maven 的 jar 包了,便想將其從本地倉庫導入到 Nexus 私服中。
(2)Nexus2.x 批量導入本地庫是十分容易的,只需將庫文件夾復制到對應 nexus 庫下面,去網頁刷新一下索引就OK了。在 Nexus3.x 中,應該怎么做
a). 首先訪問 Nexus 管理頁面並登錄,點擊“Create repository”按鈕新建一個類型為maven2(hosted)的倉庫。
b). 在服務器 /data/nexus 目錄下,新建一個文件夾 import,放入我們的本地庫文件夾:
c). 在 repository 文件夾下執行如下命令創建一個 shell 腳本:
vi mavenimport.sh
#!/bin/bash
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
d). 保存退出后執行如下命令
#賦予其執行權限:
$ chmod +x mavenimport.sh
#jar 包都導入到指定倉庫中
$ ./mavenimport.sh -u deployment -p deployment123 -r http://10.15.22.172:8081/nexus/repository/maven-local/
#注意:命令中 Nexus 用戶名、用戶密碼、倉庫地址根據實際情況進行修改。
e). 訪問 Nexus 控制台頁面,可以發現確實都上傳成功了