DevOps - 項目私庫 - Nexus Repository


相關鏈接

Sonatype官網:https://www.sonatype.com

Products: Nexus Repository OSS 2.x & 3.x  

Documentation: https://help.sonatype.com/docs 文檔分為Nexus Repository OSS 2.x & 3.x 版本,點擊 Switch 可以切換

Download: https://www.sonatype.com/download-oss-sonatype 瀏覽器狀態下,點擊 選擇版本 下載3.x版本,頁面底部點擊 Nexus 2.x 可以下載2.x版本,也可以在Documentation頁面點擊 Dounload 頁面下載。

Linux 使用 wget 下載需要獲取真實的下載地址,可以在瀏覽器中下載相應版本,拷貝相應地址到終端下載。

https://sonatype-download.global.ssl.fastly.net/repository/repositoryManager/3/nexus-3.13.0-01-unix.tar.gz

官方Docker鏡像:https://hub.docker.com/u/sonatype/

Nexus Repository OSS 3.x 支持的格式

 

Nexus 概述

Nexus 是“開箱即用”的系統,不需要數據庫,它使用文件系統加 Lucene 來組織數據,支持 WebDAV 與 LDAP 安全身份認證。Nexus 還提供了強大的倉庫管理功能,構件搜索功能,它基於 REST,友好的 UI 是一個 extjs 的 REST 客戶端,它占用較少的內存,基於簡單文件系統而非數據庫。Nexus 極大地簡化了本地內部倉庫的維護和外部倉庫的訪問。另外,Nexus 還可以在代理遠程倉庫的同時維護本地倉庫,以降低中央倉庫的負荷,節省外網帶寬和時間。

本篇 Nexus 選擇 3.x 版本,Nexus3.x 相較 2.x 版本有很大的改變:

1)從底層重構,從而提高性能,增強擴展能力,並改善用戶體驗
2)升級界面,增加更多的瀏覽,搜索和管理功能
3)提供安裝包,使部署更簡單(安裝完自動添加成服務,省去手動添加的麻煩)
4)增加 Docker,NuGet,npm,Bower的支持
5)提供新的管理接口,從而能自動管理任務。
注意:3.x版本只能運行在JVM8及以上

總之,本地內部倉庫在本地構建nexus私服的好處有:

1)加速構建、穩定;
2)節省帶寬、節省中央maven倉庫的帶寬;
3)控制和審計;
4)能夠部署第三方構件;
5)可以建立本地內部倉庫、可以建立公共倉庫

 這些優點使得Nexus日趨成為最流行的Maven倉庫管理器。

私服是指私有服務器,是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構建。有了私服之后,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。

概念

內置 Repository

登錄Nexus

Nexus默認管理員用戶名和密碼為:admin/admin123

Nexus 內置倉庫介紹

Maven Gentral:該殘酷代理Maven中央倉庫,其策略為Release,因此只會下載和緩存中央倉庫中的發布版本構件。

Release:這是一個策略為Release的宿主類型倉庫,用來部署組織內部的發布版本構件。

Snapshots:這是一個策略為Snapshot的宿主類型倉庫,用來部署組織內部的快照版本構件。

3rd party:這是一個策略為Release的宿主類型倉庫,用來部署無法從公共倉庫獲得的第三方發布版本構件。

Apache Snapshots: 這是一個策略為Snapshot的代理倉庫,用來代理Apache Maven倉庫的快照版本構件。

Codehaus Snapshots: 這是一個策略為Snapshot的代理倉庫,用來代理Codehaus Maven倉庫的快照版本構件。

Google code: 這是一個策略為Release的代理倉庫,用來代理Google Code Maven倉庫發布版本構件。

java.net Maven2:這是一個策略為Release的代理倉庫,用來代理java.net Maven倉庫的發布版本構件

Public Repositories:該倉庫組將上述所有策略為Release的倉庫聚合並通過一致的地址提供服務

Public Snapshot Repositories: 該倉庫組將上述所有的策略為Snapshot的倉庫聚合並通過一致的地址提供服務。(在nexus-oss-webapp-1.9.2.3 這版本中沒有此項)

Repository Type

HostedRepository- nexus本機的資源庫(相當於nexus所在服務器硬盤上已經存在的jar、pom文件庫)
ProxyRepository-代理庫,很多開源官方組織都在互聯網上公布了Repository,供全世界的開發者使用,nexus中設置該類型的資源庫后,其它使用nexus的開發者,表面上是在請求nexus服務器上的jar包,但nexus實質是背后是在請求這些互聯網資源,首次會把服務器上沒有的資源,從網上download到nexus服務器(以文件形式保存到硬盤上),然后再返回給開發者,下次再有同樣的pom/jar請求時,直接從服務器硬盤上返回,不再請求互聯網
Repository Group-資源組,比如我們有很多資源庫:資源庫A、資源庫B...,可以把它們再成組合一個特殊的資源C,然后其它開發人員,在maven里配置資源C地址,這樣maven在向資源C請求jar包里,實質會搜索資源A、資源B

Repository Format

安裝運行

Java Runtime Environment

Windows

Unix/Linux

啟動nexus(默認端口是8081)
[root@master-node src]# /usr/local/nexus/bin/nexus 
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
[root@master-node src]# /usr/local/nexus/bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!  
WARNING: ************************************************************
Starting nexus
上面在啟動過程中出現告警:不推薦使用root用戶啟動。這個告警不影響nexus的正常訪問和使用。
去掉上面WARNING的辦法:
[root@master-node src]# vim /etc/profile
......
export RUN_AS_USER=root
[root@master-node src]# source /etc/profile
[root@master-node src]# lsof -i:8081            //nexus服務啟動成功后,需要稍等一段時間,8081端口才起來
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1486 root 859u IPv4 23504303 0t0 TCP *:tproxy (LISTEN)

在部署機上的iptables里打開8081端口
[root@master-node src]# vim /etc/sysconfig/iptables
....
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
[root@master-node src]# /etc/init.d/iptables restart

訪問nexus,即http://localhost:8081    (如果出現404,就訪問http://localhost:8081/nexus)

Docker

WebUI 配置管理

 

訪問nexus,即http://localhost:8081    (如果出現404,就訪問http://localhost:8081/nexus)

出現上述頁面,說明配置nexus成功!
點擊右上角“Log in”,
輸入默認用戶名(admin)和默認密碼(admin123)登錄

可以點擊上面的“設置”圖標,在“設置”里可以添加用戶、角色,對接LDAP等的設置,如下:

可以在“管理”里查看nexus的系統信息

注意下面幾點說明:
1.component name的一些說明: 
    1)maven-central:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar 
    2)maven-releases:私庫發行版jar 
    3)maven-snapshots:私庫快照(調試版本)jar 
    4)maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml中使用。
2.Nexus默認的倉庫類型有以下四種:
    1)group(倉庫組類型):又叫組倉庫,用於方便開發人員自己設定的倉庫;
    2)hosted(宿主類型):內部項目的發布倉庫(內部開發人員,發布上去存放的倉庫);
    3)proxy(代理類型):從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值即被代理的遠程倉庫的路徑);
    4)virtual(虛擬類型):虛擬倉庫(這個基本用不到,重點關注上面三個倉庫的使用);
3.Policy(策略):表示該倉庫為發布(Release)版本倉庫還是快照(Snapshot)版本倉庫;
4.Public Repositories下的倉庫 
   1)3rd party: 無法從公共倉庫獲得的第三方發布版本的構件倉庫,即第三方依賴的倉庫,這個數據通常是由內部人員自行下載之后發布上去;
   2)Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫 
   3)Central: 用來代理maven中央倉庫中發布版本構件的倉庫 
   4)Central M1 shadow: 用於提供中央倉庫中M1格式的發布版本的構件鏡像倉庫 
   5)Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫 
   6)Releases: 內部的模塊中release模塊的發布倉庫,用來部署管理內部的發布版本構件的宿主類型倉庫;release是發布版本;
   7)Snapshots:發布內部的SNAPSHOT模塊的倉庫,用來部署管理內部的快照版本構件的宿主類型倉庫;snapshots是快照版本,也就是不穩定版本
所以自定義構建的倉庫組代理倉庫的順序為:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下載包會更快。
5.Nexus默認的端口是8081,可以在etc/nexus-default.properties配置中修改。
6.Nexus默認的用戶名密碼是admin/admin123
7.當遇到奇怪問題時,重啟nexus,重啟后web界面要1分鍾左右后才能訪問。
8.Nexus的工作目錄是sonatype-work(路徑一般在nexus同級目錄下)
[root@master-node local]# pwd
/usr/local
[root@master-node local]# ls nexus/
bin deploy etc lib LICENSE.txt NOTICE.txt public system
[root@master-node local]# ls sonatype-work/
nexus3
[root@master-node local]# ls sonatype-work/nexus3/
backup blobs cache db elasticsearch etc generated-bundles health-check instances keystores lock log orient port tmp

Nexus倉庫分類的概念:
1)Maven可直接從宿主倉庫下載構件,也可以從代理倉庫下載構件,而代理倉庫間接的從遠程倉庫下載並緩存構件 
2)為了方便,Maven可以從倉庫組下載構件,而倉庫組並沒有時間的內容(下圖中用虛線表示,它會轉向包含的宿主倉庫或者代理倉庫獲得實際構件的內容).

 

Nexus的web界面功能介紹

1.Browse Server Content

1.1  Search
這個就是類似Maven倉庫上的搜索功能,就是從私服上查找是否有哪些包。
注意:
1)在Search這級是支持模糊搜索的,如圖所示:

2)如果進入具體的目錄,好像不支持模糊搜索,如圖所示:

1.2  Browse

1)Assets
這是能看到所有的資源,包含Jar,已經對Jar的一些描述信息。
2)Components
這里只能看到Jar包。

2.Server Adminstration And configuration

看到這個選項的前提是要進行登錄的,如上面已經介紹登陸方法,右上角點擊“Sign In”的登錄按鈕,輸入admin/admin123,登錄成功之后,即可看到此功能,如圖所示:

2.1 Blob Stores
文件存儲的地方,創建一個目錄的話,對應文件系統的一個目錄,如圖所示:

2.2 Repositories

1)Proxy
這里就是代理的意思,代理中央Maven倉庫,當PC訪問中央庫的時候,先通過Proxy下載到Nexus倉庫,然后再從Nexus倉庫下載到PC本地。
這樣的優勢只要其中一個人從中央庫下來了,以后大家都是從Nexus私服上進行下來,私服一般部署在內網,這樣大大節約的寬帶。
創建Proxy的具體步驟
1--點擊“Create Repositories”按鈕

2--選擇要創建的類型

3--填寫詳細信息
Name:就是為代理起個名字
Remote Storage: 代理的地址,Maven的地址為: https://repo1.maven.org/maven2/
Blob Store: 選擇代理下載包的存放路徑

2)Hosted
Hosted是宿主機的意思,就是怎么把第三方的Jar放到私服上。
Hosted有三種方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已經發布的Jar包
Snapshot: 未發布的版本
Mixed:混合的
Hosted的創建和Proxy是一致的,具體步驟和上面基本一致。如下:

注意事項:
Deployment Pollcy: 需要把策略改成“Allow redeploy”。

3)Group
能把兩個倉庫合成一個倉庫來使用,目前沒使用過,所以沒做詳細的研究。

2.3 Security
這里主要是用戶、角色、權限的配置(上面已經提到了在這里添加用戶和角色等)

2.4 Support
包含日志及數據分析。

2.5 System

主要是郵件服務器,調度的設置地方

 

這部分主要講怎么和Maven做集成,集成的方式主要分以下種情況:代理中央倉庫、Snapshot包的管理、Release包的管理、第三方Jar上傳到Nexus上。

代理中央倉庫
只要在PMO文件中配置私服的地址(比如http://192.168.1.14:8081)即可,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<repositories>
         <repository>
             < id >maven-central< /id >
             <name>maven-central< /name >
             <url>http: //192 .168.1.14:8081 /repository/maven-central/ < /url >
             <snapshots>
                 <enabled> true < /enabled >
             < /snapshots >
             <releases>
                 <enabled> true < /enabled >
             < /releases >
         < /repository >
     < /repositories >

Snapshot包的管理
1)修改Maven的settings.xml文件,加入認證機制

1
2
3
4
5
6
<servers>
<server>
       < id >nexus< /id >
       <username>admin< /username >
       <password>admin123< /password >
      < /server >

2)修改工程的Pom文件

1
2
3
4
5
6
7
8
9
10
11
12
<distributionManagement>
         <snapshotRepository>
             < id >nexus< /id >
             <name>Nexus Snapshot< /name >
             <url>http: //192 .168.1.14:8081 /repository/maven-snapshots/ < /url >
         < /snapshotRepository >
         <site>
             < id >nexus< /id >
             <name>Nexus Sites< /name >
             <url>dav:http: //192 .168.1.14:8081 /repository/maven-snapshots/ < /url >
         < /site >
     < /distributionManagement >

注意事項:

上面修改的Pom文件如截圖中的名字要跟/usr/local/maven/conf/settings.xml文件中的名字一定要對應上。

3)上傳到Nexus上

1--項目編譯成的jar是Snapshot(POM文件的頭部)

1
2
3
4
<groupId>com.woasis< /groupId >
<artifactId> test -nexus< /artifactId >
<version>1.0.0-<span style= "color: #ff0000;" >SHAPSHOT< /span >< /version >
<packaging>jar< /packaging >

2--使用mvn deploy命令運行即可(運行結果在此略過)

3--因為Snapshot是快照版本,默認他每次會把Jar加一個時間戳,做為歷史備份版本。

Releases包的管理

1)與Snapshot大同小異,只是上傳到私服上的Jar包不會自動帶時間戳
2)與Snapshot配置不同的地方,就是工程的PMO文件,加入repository配置

1
2
3
4
5
6
<distributionManagement>
         <repository>
             < id >nexus< /id >
             <name>Nexus Snapshot< /name >
             <url>http: //192 .168.1.14:8081 /repository/maven-releases/ < /url >
         < /repository >

3)打包的時候需要把Snapshot去掉

1
2
3
4
<groupId>com.woasis< /groupId >
     <artifactId> test -nexus< /artifactId >
     <version>1.0.0< /version >
<packaging>jar< /packaging >

第三方Jar上傳到Nexus

[root@master-node src]# mvn deploy:deploy-file -DgroupId=org.jasig.cas.client -DartifactId=cas-client-core -Dversion=3.1.3 -Dpackag
注意事項:
-DrepositoryId=nexus 對應的就是Maven中settings.xml的認證配的名字。

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM