Nexus之由浅入深

1.  私服介绍

    私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。    

    image

2.  Nexus介绍

     1.  介绍

        Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
        如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。
        正常做法是在本地架设一个Maven仓库服务器,即利用Nexus私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。
        Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
        Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
        Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
        Nexus支持WebDAV与LDAP安全身份认证。
        Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。

    2.  为什么构建Nexus私服

        如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。

    3.  在本地构建Nexus私服的好处

        1)加速构建;
        2)节省带宽;
        3)节省中央maven仓库的带宽;
        4)稳定(应付一旦中央服务器出问题的情况);
        5)控制和审计;
        6)能够部署第三方构件;
        7)可以建立本地内部仓库;
        8)可以建立公共仓库

3.  Nexus安装

    1.  安装jdk

        jdk1.8版本以上,因为我们要安装nexus3

    2.  官网下载nexus3

        https://www.sonatype.com/products/nexus-community-edition-download

    3.  安装

        设置账号

          useradd -M -s /sbin/nologin nexus

        解压

          tar -zxvf nexus-3.20.1-01-unix.tar.gz

        放置指定目录

          mv sonatype-work /opt/

          mv nexus /opt/

        设置所属主属组

          chown -R nexus:nexus /opt/nexus /opt/sonatype-work

        设置用户

          /opt/nexus/bin/nexus.rc

          run_as_user="nexus"

        设置端口

          /opt/nexus/etc/nexus-default.properties

          application-port=8082

          application-host=0.0.0.0

    4.  设置系统启动

        /etc/systemd/system/nexus.service

[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target

4.  Nexus配置  

    1.  访问地址

        http://IP:8082      

        image

    2.  概念说明

        1.  名称

                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.  Blob Stores

            文件存储的地方,创建一个目录的话,对应文件系统的一个目录           

            image

        5.  Repositories

            1.  Proxy

                创建私库

                选择创建的类型

                填写详细信息

                  Name:  代理名称

                  Remote Storage:  代理地址

                  Blob Store:  选择代理下载包的存放路径                  

                  image               

            2.  Hosted

                Hosted有三种方式,Releases、SNAPSHOT、Mixed
                Releases: 一般是已经发布的Jar包
                Snapshot: 未发布的版本
                Mixed:混合的
                Hosted的创建和Proxy是一致的,具体步骤和上面基本一致。                      

                 注意Deployment Policy,需要把策略改成"Allow redeploy"

            3.  Group

                能把两个仓库合成一个仓库来使用

        6.  Security

            设置用户,角色,权限

        7.  Support

             包含日志及数据分析

        8.  System

            设置邮箱服务

5.  上传代码到Nexus的方式

    1.  使用maven上传

        因为我使用的是jenkins,所以需要在jenkins上安装maven服务。安装好以后,需要修改maven的settings.xml文件。

        设置登录信息       

<servers>
  <server>
    <id>nexus-releases</id>
    <username>admin</username>
    <password>admin123</password>
  </server>

  <server>
    <id>nexus-snapshots</id>
    <username>admin</username>
    <password>admin123</password>
  </server>
</servers>

        1.  上传Release版本

mvn deploy:deploy-file \
  -Dfile=xxx.jar \
  -DgroupId=com.test \
  -DartifactId=testlib \
  -Dversion=1.0.0 \
  -Dpackaging=jar \
  -DrepositoryId=nexus-releases \
  -Durl=http://nexus.xxx.com/repository/maven-releases/

        2.  上传Snapshot版本

mvn deploy:deploy-file \
  -Dfile=xxx.jar \
  -DgroupId=com.test \
  -DartifactId=testlib \
  -Dversion=1.0.0-SNAPSHOT \
  -Dpackaging=jar \
  -DrepositoryId=nexus-snapshots \
  -Durl=http://nexus.xxx.com/repository/maven-snapshots/

    2.  使用nexus的UI上传界面        

        image   

posted @ 2020-08-04 17:47  奋斗史  阅读(51)  评论(0)    收藏  举报