分享

第八节:Maven搭建Nexus私服与权限管理

 Baruch 2017-10-19
Nexus下载与启动:
     下载地址为Nexus官网:http://www./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://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中使用,这里我们配置远程仓库的地址和插件仓库。
  1. <profiles>  
  2.         <profile>  
  3.             <id>jdk8</id>  
  4.             <activation>  
  5.                 <activebydefault>true</activebydefault>  
  6.                 <jdk>1.8</jdk>  
  7.             </activation>  
  8.             <properties>  
  9.                 <maven.compiler.source>1.8</maven.compiler.source>  
  10.                 <maven.compiler.target>1.8</maven.compiler.target>  
  11.                 <maven.compiler.compilerversion>1.8</maven.compiler.compilerversion>  
  12.             </properties>  
  13.         </profile>  
  14.         <profile>  
  15.             <id>nexusRep</id>  
  16.             <repositories>  
  17.                 <repository>  
  18.                     <id>nexus</id>  
  19.                     <name>Nexus Repository</name>  
  20.                     <url>http://192.168.1.88:8081/nexus/content/groups/public/</url>  
  21.                     <releases><enabled>true</enabled></releases>  
  22.                     <snapshots><enabled>true</enabled></snapshots>  
  23.                 </repository>  
  24.             </repositories>  
  25.              <pluginRepositories>  
  26.                 <pluginRepository>  
  27.                     <id>nexus</id>  
  28.                     <name>Nexus pluginRepository</name>  
  29.                     <url>http://192.168.1.88:8081/nexus/content/groups/public/</url>  
  30.                     <releases><enabled>true</enabled></releases>  
  31.                     <snapshots><enabled>true</enabled></snapshots>  
  32.                 </pluginRepository>  
  33.             </pluginRepositories>  
  34.         </profile>  
  35. </profiles>  
     但是Maven除了从Nexus上下载构件之外,还会时不时从中央仓库下载构件,然而这应该是Nexus的工作,所以我们需要配置一个镜像,用
<mirrorof>*</mirrorof>将Maven任何构件下载的请求都转发到私服中。
  1. <mirrors>  
  2.         <mirror>  
  3.             <id>nexus</id>  
  4.             <name>A Local Nexus Server</name>  
  5.             <url>http://192.168.1.121:8081/nexus/content/groups/public/</url>  
  6.             <mirrorof>*</mirrorof>  
  7.         </mirror>  
  8. </mirrors>  
     这里就有一个问题,在这里配置了镜像,那在<profiles>里配置的远程仓库不是没有用了吗?
     当Maven需要下载发布版或者快照版构件的时候,他会首先检查我们配置的远程仓库中的<releases>和<snapshots>元素,看该类型的构件是否可以下载,如果可以下载,就转到镜像地址去下载。所以我们配置的远程仓库中的<url>失效了,有效的是<releases>和<snapshots>元素。

使用Maven部署构件到Nexus:
     在项目正常开发中,快照版本的构件可以部署到Nexus中策略为Snapshot的例如:maven-snapshots宿主仓库中,发布版本可以部署到Nexus中策略为Release的例如:maven-releases宿主仓库中,项目的POM文件配置如下:
  1. <distributionManagement>  
  2.         <repository>  
  3.             <id>Nexus-releases</id>  
  4.             <name>Nexus-releases-repositories</name>  
  5.             <url>http://192.168.1.121:8081/nexus/repositories/releases/</url>  
  6.         </repository>  
  7.         <snapshotRepository>  
  8.             <id>Nexus-snapshots</id>  
  9.             <name>Nexus-snapshots-repositories</name>  
  10.             <url>http://192.168.1.121:8081/nexus/repositories/snapshots/</url>  
  11.         </snapshotRepository>  
  12. </distributionManagement>   
     但是Nexus仓库对于匿名用户是只读的,所以为了能够部署构件,还需要在settings.xml文件中配置认证信息。
  1. <servers>  
  2.         <server>  
  3.             <id>nexus</id>  
  4.             <username>admin</username>  
  5.             <password>*****</password>  
  6.         </server>  
  7. </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:以可配置的方式删除仓库的快照构件。






    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多