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

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://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:以可配置的方式删除仓库的快照构件。


     
     
     

版权声明:本文为hellow__world原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>