Nexus3作為maven私有倉庫和制品庫


一、部署 Nexus

可以用來進行指定私服的中央地址、將自己的Maven實際項目推送到私服主流地址、從私服下載中央倉庫的項目進行過程中的索引、從私服倉庫下載所依賴的組件、將第三方項目jar上傳到私服供其他開發組員使用。

測試環境使用Docker安裝部署

docker run -d -p 8081:8081 --name nexus -v /data/volumes/nexus-data:/nexus-data sonatype/nexus3

安裝完成后默認的admin賬號密碼存儲在了數據目錄,獲取初始化密碼后更新賬號密碼。

我們將默認的倉庫全部刪除掉,重新創建

在創建之前說明下倉庫類型  type:

  • hosted: 本地倉庫,用於內部項目發布的倉庫
  • proxy: 從遠程中央倉庫中找到數據的倉庫,並拉取到本地
  • group: group類型的倉庫,是一個聚合類型的倉庫。它可以將前面我們創建hosted類型和proxy類型的倉庫聚合成一個URL對外提供服務的統一倉庫

二、Nexus 作為maven私有倉庫

1、創建blob存儲

2、創建一個hosted類型的maven倉庫

點擊Repository下面的 Repositories – Create repository – maven2(hosted) :

Name: 定義一個名稱 maven-local

Online: 勾選。這個開關可以設置這個maven repo是在線還是離線。

Maven2:這里有三種方式,Releases、SNAPSHOT、Mixed。

  • Releases: 一般是已經發布的Jar包
  • Snapshot: 未發布的版本
  • Mixed:混合的

 

 3、創建一個proxy類型的maven倉庫

proxy的功能就是代理中央Maven倉庫,當PC訪問中央庫的時候,先通過Proxy下載到Nexus倉庫,然后再從Nexus倉庫下載到PC本地。
這樣的優勢只要其中一個人從中央庫下來了,以后大家都是從Nexus私服上進行下來,私服一般部署在內網,這樣大大節約的寬帶   

可以設置多個 proxy 在 group 進行聚合

Name: proxy-maven

Maven 2: 不設置,使用默認。

Remote Storage: 遠程倉庫地址,這里填寫: https://repo1.maven.org/maven2/    ,還可以配置阿里的:   https://maven.aliyun.com/repository/public/

 

 4、創建一個group類型的maven倉庫

group類型的maven倉庫,是一個聚合類型的倉庫。它可以將前面我們創建的2個倉庫聚合成一個URL對外提供服務,可以屏蔽后端的差異性,實現類似透明代理的功能。后面通過一些配置,大家可能會對這個group有更加深入的了解。

Name:group-maven

Storage:選擇專用的blob存儲maven-use。

group : 將左邊可選的2個倉庫,添加到右邊的members下。

 這樣配置以后,我們就可以使用了。

5、配置maven使用nexus私有倉庫

將項目編譯依賴地址指向改成私服的配置,需要通過更改maven的配置實現,也就是更改maven/conf/settings.xml的倉庫地址。

在servers段添加:
  <servers>
    <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>123456</password>
    </server>
 </servers>

在 mirrors 段添加:
<mirrors>
    <mirror>        
      <id>nexus-releases</id>        
      <name>nexus-maven-public</name>        
      <url>http://192.168.75.11:8081/repository/group-maven/</url>        
      <mirrorOf>*</mirrorOf>        
    </mirror>
</mirrors>

拉取之后,進到項目里邊,開始編譯。

請注意,這個時候,我們的group里邊是空空如也的。

找一個springboot項目,地址:https://start.spring.io/

那么接下來開始編譯:

unzip demo.zip
cd demo
mvn install -e

 接下來就會進入各種依賴下載的界面

這個時候我們可以明白,其實我新搭建的倉庫里邊是空的,那么這會兒的流程就是經由group,轉向我們配置的proxy,私服在通過proxy拉取遠程的jar,然后再經由group,反饋給當前的項目。

去私服里看看:

可以看到剛剛編譯過程中所下載的jar,都如我們所想的呈現在了group當中,明明是通過proxy下載的遠程jar,為何可以在group里邊看到呢,我想,這就是我剛剛說的,group的妙處所在吧。

maven私服的基本框架已經搭成,當某一些jar無法下載的時候,一般情況下的解決辦法都是通過手動下載,然后再手動上傳到私服當中。

三、nexus作為制品庫 

1、使用maven deploy 插件進行上傳

我們需要在nexus中創建一個新的倉庫maven-hostd,同時我們需要在maven的配置文件settings.xml中配置maven-hostd認證。如下

<servers>
   <server>
      <id>oms-artifactory</id>
      <username>admin</username>
      <password>123456</password>
    </server>
 </servers>

注意使用 mvn deploy 發布時,server.id == respository.id 

mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=ruoyi-admin/target/ruoyi-admin.jar -DgroupId=com.ruoyi -DartifactId=ruoyi-admin -Dversion=4.0.0 -Dpackaging=jar -DrepositoryId=oms-artifactory -Durl=http://192.168.130.133:8081/repository/oms-artifactory/

 集成jenkins pipeline

步驟:獲取Jar包名稱、讀取pom文件、獲取坐標信息、使用mvn deploy上傳。

def jarName = sh returnStdout: true, script: "cd target;ls *.jar"
jarName = jarName - "\n"
 
def pom = readMavenPom file: 'pom.xml'
pomVersion = "${pom.version}"
pomArtifact = "${pom.artifactId}"
pomPackaging = "${pom.packaging}"
pomGroupId = "${pom.groupId}"
 
println("${pomGroupId}-${pomArtifact}-${pomVersion}-${pomPackaging}")
 
def mvnHome = tool "M2"
sh  """
    cd target/
    ${mvnHome}/bin/mvn deploy:deploy-file -Dmaven.test.skip=true  \
                            -Dfile=${jarName} -DgroupId=${pomGroupId} \
                            -DartifactId=${pomArtifact} -Dversion=${pomVersion}  \
                            -Dpackaging=${pomPackaging} -DrepositoryId=maven-hostd \
                            -Durl=http://192.168.1.200:30083/repository/maven-hostd

3、使用nexus插件上傳制品

安裝 nexus artifact uploader 插件

插件官網地址:   https://plugins.jenkins.io/nexus-artifact-uploader/

插件下載地址:  http://updates.jenkins-ci.org/latest/nexus-artifact-uploader.hpi

 

 集成到 Jenkinsfile 

//use nexus plugin
def repoName = "maven-hostd"
def filePath = "target/${jarName}"
nexusArtifactUploader artifacts: [[artifactId: "${pomArtifact}",
                                    classifier: '',
                                    file: "${filePath}",
                                    type: "${pomPackaging}"]],
                        credentialsId: 'nexus-admin-user',
                        groupId: "${pomGroupId}",
                        nexusUrl: '192.168.1.200:30083',
                        nexusVersion: 'nexus3',
                        protocol: 'http',
                        repository: "${repoName}",

查看上傳的制品

四、發布制品

安裝Maven Artifact ChoiceListProvider (Nexus)插件,需要提前安裝  extensible-choice-parameter 插件。

 

 


免責聲明!

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



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