在 k8s 中安装并使用 nexus(二)

835 阅读4分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

最初我们来到这个世界,是因为不得不来;最终我们离开这个世界,是因为不得不走。 ———— 余华《活着》

一. 概述

上一篇文章 在 k8s 中安装并使用 nexus(一) 介绍了 nexus 的安装方式,这篇文章主要介绍 nexus 的常用配置,并且实践如何推送本地代码到私服。

二. nexus 的基本配置及使用

1. nexus 配置说明

点击左侧Repositories按钮,可以看到下图所示的仓库内容:

image-20210802104618756.png

仓库说明:

Name 列

  • maven-central:maven中央库,默认从 https://repo1.maven.org/maven2/ 拉取 jar。

  • maven-releases:私库发行版 jar。

  • maven-snapshots:私库快照版(调试版本)jar。

  • maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml中使用。

Type 列(Nexus默认的仓库类型有以下四种):

  • group(仓库组类型):又叫组仓库,用于方便开发人员自己选择仓库以及设置仓库的顺序;

  • hosted(宿主类型):内部项目的发布仓库(内部开发人员发布 jar 包存放的仓库);

  • proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签,其中 Remote Storage Location 属性的值即被代理的远程仓库的路径);

  • virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);

2. 创建自定义私有仓库

自定义发行版(release)私库

点击 Create repository 创建自定义发行版(release)私库,选择 maven2 (hosted),如下图所示:

image-20210802105818181.png

自定义仓库配置如下:

image-20210802110549429.png

主要配置如下几项内容:

Name:自定义名称,必须唯一,通常发行版仓库以 xxx-release 结尾,快照版仓库以 xxx-snapshots 结尾

Version policy

  • Release 一般是发行版的 jar
  • Snapshot 一般是快照版的 jar
  • Mixed 混合的

Deployment policy:Allow redeploy

其他的配置保持默认即可。

自定义快照版(snapshot)私库

创建快照版(snapshot)私库和上面的一样,只需要将 Name 修改为 xxx-snapshotsVersion policy 修改为 Snapshot,如下图所示:

image-20210802111614933.png

自定义代理(proxy)仓库

默认从 https://repo1.maven.org/maven2/ 拉取 jar,由于网络的原因经常导致无法下载相关的资源,所以这里介绍配置阿里云的 maven 仓库代理。

阿里云 maven 仓库代理配置:maven.aliyun.com/mvn/guide

创建代理仓库:

image-20210802112928458.png

配置内容如下图:

image-20210802113253014.png

配置说明:

Name:仓库的名称必须唯一,这里配置为 aliyun-proxy

Version policy :Release

Remote storage:远程仓库地址,这里配置阿里云 maven 仓库地址:https://maven.aliyun.com/repository/public

自定义 group 仓库的顺序

可以使用默认的 maven-public ,也可以自定义一个 maven2 (group) 类型的仓库进行设置,这里选择自定义一个maven2 (group) 类型的仓库,方便学习理解。

image-20210802112248695.png

配置如下图:

image-20210802115733278.png

3. 创建 nexus 用户

image-20210802123428004.png

三. maven 配置 nexus 说明

点击前面定义的 maven2 (group) 查看其 URL 地址,如下图所示:

image-20210802123910944.png

1. 在 settings.xml 文件中配置(全局有效)

打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/settings.xml ),在<mirrors></mirrors>标签中添加 mirror 子节点,复制上面的地址,在 settings.xml 文件中添加如下内容:

  <servers>
    <!-- 这里配置 nexus 的认证信息,注意这里的 id 需要和 mirros 中的 id 相同才能够匹配认证 -->
    <server>
      <id>my-maven</id>
      <username>test</username>
      <password>maven123456</password>
    </server>
  </servers>
  <mirrors>
    <mirror>
      <id>my-maven</id>
      <!--mirrorof配置为 * 时,所有的请求都走这个mirror的url,
      mirrorof配置是某个repositoryid时,若构建找不到,则会到maven默认中央仓库去获取的。-->
      <mirrorOf>*</mirrorOf>
      <name>自定义私有仓库</name>
      <url>http://localhost:8081/repository/my-group/</url>
    </mirror>
  </mirrors>

配置完成之后,可以在 idea 中指定这个 settings.xml 文件,如下图所示:

image-20210802141230684.png

当指定配置文件之后,可以看到 idea 从 nexus 私有仓库中下载 jar 包:

image-20210802141050917.png

去到 nexus 仓库中查看仓库内容,如下图所示:

image-20210802141541800.png

2. 在 pom.xml 文件中配置私有仓库地址(项目有效)

pom.xmlrepositories 标签的作用是用来配置 maven 项目的远程仓库,示例如下:

    <repositories>
        <repository>
            <!--定义仓库 id ,必须唯一,需要 server 中的id对应,以便认证-->
            <id>my-maven</id>
            <!--仓库描述-->
            <name>自定义私有仓库</name>
            <!--仓库地址-->
            <url>http://localhost:8081/repository/my-group/</url>
            <!--是否可以从这个仓库下载releases版本的构件,默认为 true-->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!--是否可以从这个仓库下载snapshots版本的构件,默认为 true
            禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定
            -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

建议在 settings.xml 文件中配置私有仓库地址,这样所有项目都可以使用那个地址。

3. 发布本地 jar 包到 nexus 仓库

image-20210802192905324.png

查看自定义的 snapshot 仓库,目前没有相关 jar 包资源,下面如何将本地jar包发布到私有仓库。

在 pom.xml 文件中添加如下配置:

    <distributionManagement>
        <repository>
            <!--定义仓库 id ,必须唯一,需要 server 中的id对应,以便认证-->
            <id>my-maven</id>
            <!--仓库描述-->
            <name>自定义发行版仓库</name>
            <!--仓库地址-->
            <url>http://localhost:8081/repository/my-release/</url>
        </repository>
        <snapshotRepository>
            <!--定义仓库 id ,必须唯一,需要 server 中的id对应,以便认证-->
            <id>my-maven</id>
            <!--仓库描述-->
            <name>自定义快照版仓库</name>
            <!--仓库地址-->
            <url>http://localhost:8081/repository/my-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

执行如下命令发布项目到 nexus 仓库:

mvn clean deploy

构建成功之后可以查看 nexus 仓库内容如下:

image-20210802193936710.png

这里有一点值得注意的地方,如何将 jar 包发布到 release 仓库?

其实非常简单,只需要将 <version>1.0.0-SNAPSHOT</version> 中的 1.0.0-SNAPSHOT 改为 1.0.0 即可,当再次执行 mvn clean deploy 则会将 jar 包发布到 release 仓库中了。

还可以直接通过 nexus 控制台上传 jar 包到私有仓库:

image-20210802200323172.png