使用docker安装nexus3并配置使用

拉取镜像

shell 复制代码
docker pull sonatype/nexus3:3.86.2

运行docker脚本

shell 复制代码
docker run -d --name nexus \
--restart always \
-p 8887:8081 \
-v /data/nexus/data:/nexus-data \
sonatype/nexus3:3.86.2

运行报错

java 复制代码
WARN  [jetty-main-1]  org.sonatype.nexus.util.LockFile - Failed to write lock file
java.io.FileNotFoundException: /sonatype-work/nexus.lock (Permission denied)
	at java.io.RandomAccessFile.open0(Native Method)
	at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
	at java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)
	at org.sonatype.nexus.util.LockFile.lock(LockFile.java:92)

授权挂载目录权限,重新启动容器即可

shell 复制代码
chown -R 200 /data/nexus/data

配置使用

1、创建角色test,并授予浏览仓库,部署jar的权限

创建角色

浏览仓库权限
浏览仓库

部署相关权限
部署相关权限

上传组件(Docker 等)的权限
上传组件

2、创建用户并授予角色test

创建用户

3、创建仓库

这里我创建了2个仓库:zlhn-snapshots, zlhn-releases,仓库类型均选择hosted,格式 maven2

三种仓库类型的作用
proxy:代理仓库,镜像其他的仓库,如 Maven 中央仓库
hosted:宿主仓库,用于存放我们上传的包
group:仓库组,联合了多个仓库,下载时指定仓库组即可,无需指定具体的仓库

4、我们需要将刚创建的2个仓库加入到maven-public

5、还要将zlhn-snapshots, zlhn-releases两个仓库的权限授予给创建的test角色

配置maven从nexus下载构建

配置maven从nexus下载构建有两种方式:①、pom.xml方式。②、镜像方式。

①、pom.xml方式

1、首先我们创建一个maven项目,并且修改该项目的pom.xml文件,加入如下内容:

xml 复制代码
<repositories>
    <repository>
        <id>maven-nexus</id>
        <url>http://172.17.10.211:8887/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

注意:url地址对应到nexus上的哪个仓库组,因为只有仓库组提供包,我们可以在nexus上面复制地址,如下:

pom.xml方式

2、因为nexus是需要用户名和密码才能访问,所以在maven的setting.xml中添加如下配置,我们最好先备份一份原始的setting.xml文件。

xml 复制代码
<server>
  <id>maven-nexus</id>
  <username>test</username>
  <password>123456</password>
</server>

注意:上面元素的值和pom.xml中的值必须一致。 元素中的username和password根据自己去设置

②、镜像方式

1、修改maven的setting.xml文件,加入如下配置

xml 复制代码
<mirrors>
    <mirror>
      <id>mirror-nexus</id>
      <name>Nexus mirror</name>
      <url>http://172.17.10.211:8887/repository/maven-public/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

注意:上面mirrorOF配置的*,说明所有远程仓库都通过该镜像下载构件。

2、登录的用户名和密码配置不变(id改了一下):

xml 复制代码
<server>
  <id>mirror-nexus</id>
  <username>test</username>
  <password>123456</password>
</server>

id元素与上面setting.xml中配置的id同样必须相同。

项目中的 pom.xml 中配置"deploy"

1、修改maven的setting.xml文件,加入如下配置

xml 复制代码
<servers>
   <server>
      <id>zlhn-releases</id>
      <username>test</username>
      <password>123456</password>
    </server>
    <server>
      <id>zlhn-snapshots</id>
      <username>test</username>
      <password>123456</password>
    </server>
  </servers>

2、在项目的pom.xml中新增如下配置

xml 复制代码
  <distributionManagement>
    <repository>
      <id>zlhn-releases</id>
      <url>http://172.17.10.211:8887/repository/zlhn-releases/</url>
    </repository>
    <snapshotRepository>
      <id>zlhn-snapshots</id>
      <url>http://172.17.10.211:8887/repository/zlhn-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>