Jenkins之Nexus搭建Maven私有倉庫教程

arisono發表於2020-11-23

在開發過程中,有時候會使用到公司內部的一些開發包,顯然把這些包放在外部是不合適的。另外,由於專案一直在開發中,這些內部的依賴可能也在不斷的更新。可以透過搭建公司內部的Maven伺服器,將第三方和內部的依賴統一管理,同時也可以節省網路頻寬,當然前提是專案所需要的構件在私服中已經存在。如何在公司內部部署一個自己的Maven私有倉庫呢?

私服介紹

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

搭建私服前後Maven工作流程:

可以使用專門的Maven倉庫管理軟體來搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。這裡我們使用 Sonatype Nexus。

安裝Nexus

安裝JDK

openjdk比較精簡,會出現各種奇葩問題,故使用Oracle JDK版本

下載地址 下載jdk-8u151-linux-x64.rpm

# rpm -ivh jdk-8u151-linux-x64.rpm
# vim /etc/profile
# JAVA bin PATH setup
export JAVA_HOME=/usr/java/jdk1.8.0_151/export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile
# java -version
openjdk version "1.8.0_151"OpenJDK Runtime Environment (build 1.8.0_151-b12)OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

安裝Maven

下載地址下載apache-maven-3.5.2-bin.tar.gz

# wget 
# tar -zxf apache-maven-3.5.2-bin.tar.gz
# mv apache-maven-3.5.2# mv apache-maven-3.5.2 /usr/local/# ln -s apache-maven-3.5.2/ maven
# vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin
# source /etc/profile
# mvn -version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T03:58:13-04:00)Maven home: /usr/local/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64/jre
Default locale: en_US, platform encoding: UTF-8OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

安裝Nexus

下載地址 下載版本nexus-2.12.0-01-bundle.tar.gz

# wget 
# tar -zxf nexus-2.12.0-01-bundle.tar.gz
# cp -r nexus-2.12.0-01 /usr/local/# cd /usr/local/# ln -s nexus-2.12.0-01/ nexus
# cd /usr/local/nexus/bin/# ./nexus start****************************************WARNING - NOT RECOMMENDED TO RUN AS ROOT****************************************If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.# vim /usr/local/nexus/bin/nexus
RUN_AS_USER=root
# ./nexus start   # 重啟啟動
# tail -f /usr/local/nexus/logs/wrapper.log.........jvm 1    | 2017-12-26 01:44:44,958-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.rest.NexusApplication_UriMatching - Strict URI matching: truejvm 1    | 2017-12-26 01:44:45,163-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.configuration.ModelUtils - Loading model /usr/local/sonatype-work/nexus/conf/lvo-plugin.xml
jvm 1    | 2017-12-26 01:44:45,171-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.configuration.ModelUtils - Loading model /usr/local/sonatype-work/nexus/conf/ldap.xml
jvm 1    | 2017-12-26 01:44:45,808-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.webresources.internal.WebResourceServiceImpl - Discovered 1971 resources
jvm 1    | 2017-12-26 01:44:45,809-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.webresources.internal.WebResourceServlet - Max-age: 30 days (2592000 seconds)jvm 1    | 2017-12-26 01:44:45,858-0500 INFO  [ar-4-thread-1] *SYSTEM org.sonatype.nexus.proxy.storage.remote.httpclient.HttpClientRemoteStorage - Initializing remote transport for proxy repository "Apache Snapshots" [id=apache-snapshots]...jvm 1    | 2017-12-26 01:44:46,461-0500 INFO  [ar-4-thread-3] *SYSTEM org.sonatype.nexus.proxy.storage.remote.httpclient.HttpClientRemoteStorage - Initializing remote transport for proxy repository "Central" [id=central]...jvm 1    | 2017-12-26 01:44:46,522-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.InstrumentedSelectChannelConnector - Metrics enabled
jvm 1    | 2017-12-26 01:44:46,545-0500 INFO  [jetty-main-1] *SYSTEM org.eclipse.jetty.server.AbstractConnector - Started InstrumentedSelectChannelConnector@0.0.0.0:8081jvm 1    | 2017-12-26 01:44:46,545-0500 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - Running
jvm 1    | 2017-12-26 01:44:46,545-0500 INFO  [WrapperListener_start_runner] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - Started
jvm 1    | 2017-12-26 01:44:47,543-0500 INFO  [ar-4-thread-3] *SYSTEM org.sonatype.nexus.proxy.maven.routing.internal.RemoteContentDiscovererImpl - Remote strategy prefix-file on M2Repository(id=central) detected invalid input, results discarded: Prefix file size exceeds maximum allowed size (100000), refusing to load it.# netstat -tunlp|grep 8081tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      21544/java

將nexus設定為Linux系統的服務,並開機自動啟動

1、複製$NEXUS_HOME/bin/jsw/linux-x86-64/nexus 到/etc/init.d/nexus

2、授於nexus指令碼有可執行的許可權:

 chmod 755 /etc/init.d/nexus

3、修改nexus檔案,配置以下引數:

修改NEXUS_HOME 絕對路徑,如:NEXUS_HOME=”/usr/local/nexus”

設定RUN_AS_USER=nexus,或都其它的使用者,前提是建立了此使用者。

NEXUS_HOME=/usr/local/nexus
PLATFORM=linux-x86-64PLATFORM_DIR="${NEXUS_HOME}/bin/jsw/${PLATFORM}"WRAPPER_CMD="${PLATFORM_DIR}/wrapper"WRAPPER_CONF="${PLATFORM_DIR}/../conf/wrapper.conf"PIDDIR="${NEXUS_HOME}"

4、Red Hat, Fedora, CentOS增加nexus服務

cd /etc/init.d
chkconfig --add nexus
chkconfig --levels 345 nexus on
service nexus start
tail -f /usr/local/nexus/logs/wrapper.log

配置完成後,您可以訪問web介面 http://{IP}:8081/nexus/ ,進入系統進行設定

預設管理賬號:admin 密碼:admin123

Nexus管理

倉庫型別

登入Nexus在左邊選單欄裡選擇Repositories,列出已有的所有倉庫,可以看到type有幾種型別劃分

  • group 倉庫組:Nexus 透過倉庫組的概念統一管理多個倉庫,這樣我們在專案中直接請求倉庫組即可請求到倉庫組管理的多個倉庫

  • hosted 宿主倉庫:主要用於部署無法從公共倉庫獲取的構件(如oracle的JDBC驅動)以及自己或第三方的專案構件

  • proxy 代理倉庫:代理公共的遠端倉庫

  • virtual 虛擬倉庫:用於適配 Maven1

倉庫常見操作

  • 修改預設儲存路徑

  • 同步索引

  • 修改遠端同步地址為aliyun映象地址

參考資料

= = = = = = = = = =====

原文地址: http://tencent.yundashi168.com/756.html


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69988117/viewspace-2736054/,如需轉載,請註明出處,否則將追究法律責任。

相關文章