docker-compose: 部署 Nexus3

本贴最后更新于 2385 天前,其中的信息可能已经时移俗易

利用 docker-compose 在 docker 下部署 Maven 私服 Nexus

前言

先上项目源代码 liumapp/nexus-in-docker 和用于测试发布的 liumapp/convert-html-to-pdf

nexus-in-docker 项目用于在系统的 Docker 上部署 Nexus3,convert-html-to-pdf 用于测试发布到该 Nexus 私服上。

Nexus 安装运行

使用命令

docker-compose up -d 

会自动去 docker hub 拉取 Nexus:3.12.1 版本的镜像并生成容器运行。

不过因为设置了 volumes 与容器内的/nexus-data 目录建立关联,所以在运行之前,需要确保 nexus-in-docker 的根目录具备写权限。

运行成功后(不会有提示信息,可以使用 docker logs -t -f --tail 100 nexus 来查看启动日志),在浏览器内访问 http://localhost:8081 便可以打开 Nexus 的管理 web 页面。

初始的管理员帐号密码为 admin/admin123。

Deploy 项目

创建 Repository

使用 admin 登陆后,我们可以在设置一栏里创建一个 Repository,需要注意的地方只有三个:

  • Recipe 要选择 Maven2(hosted)。

    可能有小伙伴会问,为什么不是 Maven2(group)或者 Maven2(proxy)呢?
    首先要搞清楚 proxy,hosted,group 三者的关系:

    • proxy 远程仓库的代理,比如说 nexus 配置了一个 central repositoryproxy,当用户向这个 proxy 请求一个 artifact 的时候,会现在本地查找,如果找不到,则会从远程仓库下载,然后返回给用户。

    • hosted 宿主仓库,用户可以把自己的一些仓库 deploy 到这个仓库中

    • group 仓库组,是 nexus 特有的概念,目的是将多个仓库整合,对用户暴露统一的地址,这样就不需要配置多个仓库地址。

    所以我们的项目是要发布到本地的 Nexus 私服,自然就要选择 hosted。

  • Version policy 要选择 Mixed

    因为我们的 Maven 项目在打版本的时候,有时候是 Release 版本,有时候就是一个 v1.0.0 版本,像我就喜欢用后者,选择 Mixed 可以让私服支持不同类型的项目版本,如果您选择的是 Release 或者 Snapshot,那么 deploy 过来的项目就必须是这两种类型的版本,不然就会报错。

  • Deployment policy 要选择 Allow redeploy

    一个项目总不可能不更新迭代了吧,除非已经放弃治疗删库跑路了。

添加 Nexus 用户

添加一个 Nexus 用户,用于后面的 Deploy,只需要注意两点:

  • User 的 ID 将会在后面的 Maven 配置项中作为 username 来使用,所以很多情况都会发现 id 跟 username 相同的情况。

  • User 的 status 请注意设置为 active,虽然这是一个显而易见的事情,但还是会存在很多粗心大意的情况。

本地 Deploy

接下来轮到我们的另一个测试项目 liumapp/convert-html-to-pdf 上场。

首先修改本地 maven 的配置文件 settings.xml,把新添加的 maven 私服用户写入 server 下。

<servers>
  <server>
	<id>liumapp</id>
	<username>liumapp</username>
	<password>liumapp</password>
  </server>
</servers>

在要发布到该私服下的 maven 项目中,添加:

<distributionManagement>
	<repository>
		<id>liumapp</id>
		<url>http://127.0.0.1:8081/repository/liumapp/</url>
	</repository>
</distributionManagement>

这里 repository/liumapp 的 liumapp 代表您刚刚创建的 repository 名称,并不是用户名。

然后在 build 下添加以下插件

  <!--发布代码Jar插件-->
  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>2.7</version>
  </plugin>
  <!--发布源码插件-->
  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.2.1</version>
      <executions>
          <execution>
              <phase>package</phase>
              <goals>
                  <goal>jar</goal>
              </goals>
          </execution>
      </executions>
  </plugin>

最后在 console 下输入命令

mvn deploy

具体的配置可以直接在 convert-html-to-pdf 下查看 pom.xml 文件。

如果您要发布的是一个 Jar 包,那么直接使用命令:

mvn deploy:deploy-file -DgroupId=com.aspose.words -DartifactId=aspose-words -Dversion=15.8.0 -Dpackaging=jar -Dfile=./aspose-words-15.8.0-jdk16.jar -Durl=http://127.0.0.1:8081/repository/liumapp/ -DrepositoryId=liumapp

即可。

使用私服

在要从该私服下载依赖的项目中,配置 pom.xml 文件:

<repositories>
  <repository>
	<id>test</id>
	<url>http://127.0.0.1:8081/repository/liumapp/</url>
  </repository>
</repositories>

即可

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3454 回帖 • 189 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 282 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    492 引用 • 926 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...