(3条消息)第八节:Maven搭建Nexus私服与权限管理 - 博观而约取,厚积而薄发 - CSDN博客

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hellow__world/article/details/71855883

Nexus下载与启动:

     下载地址为Nexus官网:http://www.sonatype.org/nexus/

  • NEXUS OSS [ OSS = Open Source Software,开源软件——免费]
  • NEXUS PROFESSIONAL -FREE TRIAL [ 专业版本——免费体验--收费]。

     

     我们选择OSS免费版,然后选择操作系统,3.0版本的已经默认为下载源码包(bundle版本)而不是war文件。其中源码包中包含了jetty容器,也就是说不需要额外的web容器就能直接启动。而war版本的Nexus需要放入额外的web容器例如tomcat中的webapps目录下才能启动。

     

     下载了3.x - OS X的源码包之后,解压文件得到两个目录:

  • nexus-3.3.1-01:该目录包含了Nexus运行时所需要的文件,如启动脚本等。
  • sonatype-work:该目录包含了Nexus生成的配置文件,日志文件,仓库文件等。

     其中第一个目录是运行Nexus时必须的,同一个版本的Nexus该目录中的内容是一样的, 而第二个目录是Nexus在运行的时候动态创建的,里面包含了我们对仓库,角色,权限,成员的一些配置信息以及所有我们下载的构件。所以当我们备份Nexus的时候,我们需要备份的是sonatype-work目录。

     接着我们启动nexus,在命令行cd到nexus-3.3.1-01目录下的bin目录下,然后输入./nexus start启动nexus,这里可能会出现一个问题:nexus配置了jetty容器默认占用8081端口,我们可以在nexus-3.3.1-01目录的etc目录下找到nexus-default.properties文件,然后修改application-port为我们想要的端口的。

     我们输入./nexus 可以看到他提示我们可以使用的几个指令:

  • start:在后台启动服务,不在界面上打印任何启动或者运行时信息。
  • run:启动服务,但是在界面上打印出启动信息以及运行时信息以及日志信息。
  • stop:关闭服务
  • status:查看nexus运行状态
  • restart:重启服务
  • force-reload:强制重载一遍配置文件,然后重启服务

     在linux系统上启动服务的时候出现的问题可以参照:[](http://blog.csdn.net/cuker919/article/details/12052565)http://blog.csdn.net/cuker919/article/details/12052565

     启动服务之后,我们就可以在浏览器中访问:http://localhost:8082/ (这里我将端口号修改为了8082,默认8081)

     Nexus的默认管理员用户名和密码为admin/admin123。

Nexus的仓库与仓库组:

     Nexus的主要的仓库类型:

  • hosted(宿主):宿主仓库主要用于存放项目部署的构件、或者第三方构件用于提供下载。
  • proxy(代理):代理仓库就是对远程仓库的一种代理,从远程仓库下载构件和插件然后缓存在Nexus仓库中
  • group(仓库组):对我们已经配置完的仓库的一种组合策略。

     我们点击导航栏中的Repositories链接,看到如下图界面:

      Nexus内置的仓库就已经包含了主要的仓库类型:

  • maven-central:代理中央仓库、策略为Release、只会下载和缓存中央仓库中的发布版本构件。
  • maven-releases:策略为Release的宿主仓库、用来部署组织内部的发布版本内容。
  • maven-snapshots:策略为Snapshot的宿主仓库、用来部署组织内部的快照版本内容。
  • maven-public:该仓库将上述所有策略为Release的仓库聚合并通过一致的地址提供服务。
  • nuget-hosted:用来部署nuget构件的宿主仓库
  • nuget.org-proxy:代理nuget远程仓库,下载和缓冲nuget构件。
  • nuget-group:该仓库组将nuget-hosted与nuget.org-proxy仓库聚合并通过一致的地址提供服务。
  • maven-public:该仓库组将maven-central,maven-releases与maven-snapshots仓库聚合并通过一致的地址提供服务。

     我们在Maven中配置的访问Nexus的仓库一般是maven-public仓库组,我们向仓库组我们下载或者上传构件的请求,仓库组中没有实际的内容,他会转向其包含的宿主仓库或者代理仓库获得实际构件的内容。

     

     我们也可以通过简单的配置来创建一个仓库或者仓库组。当我们配置代理仓库的时候有几个参数需要注意:

  • Maximum component age:构件缓存的最长时间,对于发布版本的仓库来说,这个值默认为-1,表示构件下载后就一直保存着,不再重现下载;对于快照版本的仓库来说,这个值默认为1440,表示1440分钟后会重新缓存代理的构件。
  • Maximum metadata age:仓库元数据文件缓存的最长时间,其他定义如上。
  • Not found cache TTL:表示当一个文件没有找到后,缓存这一不存在信息的时间。以默认的1440分钟为例,如果某文件不存在,那在这之后的1440分钟内,如果Nexus再次得到这个请求,不会再查找文件系统,而是直接返回不存在。

配置Maven从Nexus下载构件:

     我们可以在项目的POM中配置仓库和插件仓库,当然如果我们想要所有的Maven项目都使用私服,可以在settings.xml中配置,但是settings.xml并不直接支持配置repositories和pluginRepositories,但是Maven提供了profiles下的profile可以让我们定义一系列的配置信息,然后指定其激活条件,能够定义在settings.xml中的信息有<repositories>、<pluginRepositories>和<properties>。定义在<properties>里面的键值对可以在pom.xml中使用,这里我们配置远程仓库的地址和插件仓库。

<profiles>        <profile>            <id>jdk8</id>            <activation>                <activebydefault>true</activebydefault>                <jdk>1.8</jdk>            </activation>            <properties>                <maven.compiler.source>1.8</maven.compiler.source>                <maven.compiler.target>1.8</maven.compiler.target>                <maven.compiler.compilerversion>1.8</maven.compiler.compilerversion>            </properties>        </profile>        <profile>            <id>nexusRep</id>            <repositories>                <repository>                    <id>nexus</id>                    <name>Nexus Repository</name>                    <url>http://192.168.1.88:8081/nexus/content/groups/public/</url>                    <releases><enabled>true</enabled></releases>                    <snapshots><enabled>true</enabled></snapshots>                </repository>            </repositories>             <pluginRepositories>                <pluginRepository>                    <id>nexus</id>                    <name>Nexus pluginRepository</name>                    <url>http://192.168.1.88:8081/nexus/content/groups/public/</url>                    <releases><enabled>true</enabled></releases>                    <snapshots><enabled>true</enabled></snapshots>                </pluginRepository>            </pluginRepositories>        </profile></profiles>

     但是Maven除了从Nexus上下载构件之外,还会时不时从中央仓库下载构件,然而这应该是Nexus的工作,所以我们需要配置一个镜像,用

<mirrorof>*</mirrorof>将Maven任何构件下载的请求都转发到私服中。

<mirrors>        <mirror>            <id>nexus</id>            <name>A Local Nexus Server</name>            <url>http://192.168.1.121:8081/nexus/content/groups/public/</url>            <mirrorof>*</mirrorof>        </mirror></mirrors>

     这里就有一个问题,在这里配置了镜像,那在<profiles>里配置的远程仓库不是没有用了吗?

     当Maven需要下载发布版或者快照版构件的时候,他会首先检查我们配置的远程仓库中的<releases>和<snapshots>元素,看该类型的构件是否可以下载,如果可以下载,就转到镜像地址去下载。所以我们配置的远程仓库中的<url>失效了,有效的是<releases>和<snapshots>元素。

使用Maven部署构件到Nexus:

     在项目正常开发中,快照版本的构件可以部署到Nexus中策略为Snapshot的例如:maven-snapshots宿主仓库中,发布版本可以部署到Nexus中策略为Release的例如:maven-releases宿主仓库中,项目的POM文件配置如下:

<distributionManagement>        <repository>            <id>Nexus-releases</id>            <name>Nexus-releases-repositories</name>            <url>http://192.168.1.121:8081/nexus/repositories/releases/</url>        </repository>        <snapshotRepository>            <id>Nexus-snapshots</id>            <name>Nexus-snapshots-repositories</name>            <url>http://192.168.1.121:8081/nexus/repositories/snapshots/</url>        </snapshotRepository></distributionManagement>    

     但是Nexus仓库对于匿名用户是只读的,所以为了能够部署构件,还需要在settings.xml文件中配置认证信息。

<servers>        <server>            <id>nexus</id>            <username>admin</username>            <password>*****</password>        </server></servers>

     当然对于一些由于许可证因素等无法发布到公共仓库的构件,我们只能自己下载然后通过Nexus的界面手动上传到私服中。

     到此为止,Nexus私服的搭建与配置基本完毕,下面是关于权限管理的问题。

     出于安全性考虑、需要对Nexus仓库进行权限管理、比如只有管理员才能配置Nexus、某个项目组有特定的仓库、等等。

Nexus的访问控制模型:

     Nexus是基于权限(Privilege)做访问控制的。一个用户可以被赋予一个或者多个角色、一个角色可以包含一个或者多个权限、还可以包含一个或者多个角色。用户必须拥有相应的角色继而拥有相应权限、才能做相应操作,但是有一点要注意这里的权限都是基于仓库的,即对仓库的增删改查权限。

     在2.x版本, Nexus预定义了一些常用且重要的角色,如:

  • UI:Basic UIPrivileges:包含了访问Nexus界面必须的最基本的权限。
  • UI:RepositoryBrowser:包含了浏览仓库页面所需要的权限。
  • UI:Search:包含了访问快速搜索栏及搜索界面所需要的权限。
  • Repo:AllRepositories (Read):给予用户读取所有仓库内容的权限。没有仓库的读权限用户将无法在仓库页面看到实际的仓库内容,也无法使用Maven从仓库下载构件。
  •  Repo:AllRepositories (Full Control):给予用户完全控制所有仓库内容的权限。用户不仅可以浏览、下载构件,还可以部署构件及删除仓库内容。

     在3.x版本中, Nexus只预定义了两个重要的角色:

  • nx-admin:拥有Nexus所有权限
  • nx-anonymous:匿名用户角色,拥有访问Nexus界面,浏览仓库内容和搜索构件的功能。

Nexus为项目分配独立的仓库:

     当我们有多个项目时,为了避免各个项目上传到同一仓库发生冲突干扰、可以为每个项目创建独立的仓库、每个项目所拥有的仓库只有其项目组成员才能对此仓库进行部署、修改和删除权限、其他用户只能读取、下载、和搜索该仓库内容。

     我们以2.x版本举例,步骤如下:

  1. 创建项目独立仓库,例如我们建立一个发布版本的Test-Release仓库
  2. 为仓库建立权限。点击左侧导航栏的Privileges,点击Add按钮,然后选择为那个仓库建立权限(Repository),以及建立什么样的权限(Repository Target)。
  3. 创建包含上述权限的角色。点击左侧导航栏的Roles,点击Add按钮,选择Nexus Role进入创建角色界面,为角色添加上第二步创建的一个或者多个权限以及一些基本配置。
  4. 创建用户、指定用户拥有上面的角色。点击左侧导航栏的Users,点击Add按钮,选择Nexus User进入创建用户界面,为用户添加上第三步创建的一个或者多个角色以及一些基本配置。

Nexus调度任务:

Nexus提供了一系列可配置的调度任务来方便用户管理系统。用户可以设定这些任务运行的方式,例如每天、每周等。调度任务会在适当的时候在后台运行。

     要建立一个调度任务,单击左边导航菜单中的“Scheduled Tasks”,然后再右边的界面上单击Add按钮,按照页面上的提示填写相关内容。

     Nexus包含了以下几种类型的调度任务:

  • Download Indexs:为代理仓库下载远程索引。
  • Empty Trash:清空Nexus的回收站,一些操作实际是将文件移到了回收站中。
  • Evict UnusedProxied Items From Repository Caches:删除代理仓库中长期未被使用的构件缓存。
  • Expire RepositoryCache:Nexus为代理仓库维护了远程仓库的信息以避免不必要的网络流量,该任务清空这些信息以强制Nexus去重新获取远程仓库的信息。
  • Publish Indexs:将仓库索引发布成可供m2eclipse和其他Nexus使用的格式。
  • Purge NexusTimeline:删除Nexus的时间线文件,该文件用于建立系统的RSS源。
  • Rebuild MavenMetadata Files:基于仓库内容重新创建仓库元数据文件maven-metadata.xml,同时重新创建每个文件的校验和md5与sha1。
  • ReIndex Repositories:为仓库编纂索引。
  • Remove SnapshotsFrom Repositories:以可配置的方式删除仓库的快照构件。

Original url: Access
Created at: 2019-03-21 16:09:21
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论