当前位置: 首页 > article >正文

Docker:深入解析Nexus技术构建可靠的软件仓库管理系统

1、简述

在现代软件开发中,有效的软件仓库管理是确保项目成功的关键一环。Nexus Repository Manager作为一种流行的仓库管理系统,为开发人员提供了强大的工具,用于存储、检索和管理软件构建。本文将深入解析Nexus技术,探讨其关键特性、优势,以及如何正确配置和使用它来提高软件开发流程的效率。

2、特性

Nexus Repository Manager是由Sonatype开发的一款开源的仓库管理系统。它支持多种仓库类型,包括Maven、npm、Docker、NuGet等,使得开发者能够集中管理各种构建工件。Nexus不仅仅是一个二进制仓库管理器,还提供了一系列的功能,包括安全性、版本控制、存储管理等

  • 多仓库支持
    Nexus支持多种仓库类型,例如Maven、npm、Docker等,使得开发者能够统一管理不同技术栈的构建工件。这种多仓库支持为团队提供了更大的灵活性,使其能够在同一个平台上管理各种依赖关系。

  • 安全性
    Nexus通过集成Sonatype的一系列安全工具,可以进行漏洞扫描,帮助团队及时发现并解决潜在的安全问题。这对于保障软件构建的可靠性和安全性至关重要。

  • 版本控制
    Nexus支持版本控制,开发者可以方便地追溯和管理软件构建的不同版本。这有助于更好地控制项目的演进过程,确保每个构建都是可重现的。

  • 智能代理
    Nexus的智能代理功能允许将远程仓库的内容缓存在本地,提高构建的速度。这对于团队分布在不同地理位置的情况下尤为重要,可以有效减少远程仓库的访问延迟。

  • 用户权限管理
    通过Nexus的用户权限管理系统,团队可以精确控制用户对仓库的访问权限。这有助于确保只有授权人员能够访问和操作关键的构建工件,提高了系统的安全性。

3、挂载

Nexus的安装对内存是有要求的,至少要2G内存才可以。首先我们可以创建Nexus映射到外面的仓库地址:

mkdir -p /data/nexus/nexus-data 
chown -R 200 /data/nexus/nexus-data

4、安装

Nexus的安装相对简单,可以通过官方提供的安装包或Docker镜像进行安装。在安装完成后,需要进行一些基本的配置,包括仓库类型、代理设置、用户权限等。

拉取Nexus最新镜像:

docker pull sonatype/nexus3

启动Nexus镜像:

docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -v /data/nexus/nexus-data:/nexus-data sonatype/nexus3

安装有点久,可以通过docker logs查看日志是否安装完成:

[root@localhost data]# docker logs -f nexus3 
-------------------------------------------------

Started Sonatype Nexus OSS 3.37.3-02

-------------------------------------------------

密码修改,密码路径存在/nexus-data/admin.password:

[root@localhost data]# docker exec nexus3 cat /nexus-data/admin.password
2e29e91a-e3d8-4c3d-9fbb-78184b648508

通过访问http://192.168.254.133:8081/当前密码登录,并修改自己的密码:
在这里插入图片描述

5、Maven 仓库

Nexus Repository Manager 使用三种主要的仓库类型来支持不同的用例和需求,它们分别是 Proxy 仓库、Hosted 仓库和 Group 仓库。

  • Proxy 仓库: Proxy 仓库主要用于代理远程仓库的内容,以提高构建时的性能和可靠性。
  • Hosted 仓库:Hosted 仓库用于存储和管理本地创建的构建工件,这包括项目的内部构建、第三方库等。
  • Group 仓库:Group 仓库用于将多个仓库组合成一个逻辑单元,以方便开发者从一个位置访问多个仓库的内容。

6、创建Hosted

当开发者构建项目时,生成的构建工件会被部署到 Hosted 仓库。这样,其他开发者或构建流程就可以从该仓库获取这些构建工件,而不必依赖外部的仓库。

6.1 releases&snapshots

创建一个Maven仓库,通过Repository>Repositories>Create repository>maven2(hosted)创建maven项目,注意Deployment policy一定要设置成allow redeploy、version pollcy根据项目打包是否存在SNAPSHOT或RELEASE字符来设定。

我们创建单独的存储库“快照”和“版本:my-releases和my-snapshots
在这里插入图片描述

6.2 maven配置

在本地maven库中settings.xml中添加授权账号,并且要注意的Id要跟我们上一步创建的快照和版本一致:

<server>
    <id>my-releases</id>
    <username>admin</username>
    <password>123456</password>
</server>
<server>
    <id>my-snapshots</id>
    <username>admin</username>
    <password>123456</password>
</server>

在mirrors中添加maven仓库拉取的路径:

<mirror>
    <id>maven-public</id>
    <mirrorOf>*</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://192.168.254.133:8081/repository/maven-public/</url>
</mirror>
6.3 上传Jar

通过在项目中pom.xml中配置仓库路径来实现我们编译的jar可以通过maven的deploy指令上传到我们创建的maven仓库中:

<distributionManagement>
    <repository>
        <id>my-releases</id>
        <name>releases</name>
        <url>http://192.168.254.133:8081/repository/my-releases/</url>
    </repository>
    <snapshotRepository>
        <id>my-snapshots</id>
        <name>snapshots</name>
        <url>http://192.168.254.133:8081/repository/my-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

在这里插入图片描述

6.4 Nexus添加Jar

我们也可以本地打好JAR包,通过Nexus 上传模块直接来上传,因为我们上传的是my-releases版本,添加Version版本号要加后缀-release:
在这里插入图片描述在这里插入图片描述

7、创建Group

Group 仓库可以包含多个 Proxy 仓库和 Hosted 仓库。当开发者从 Group 仓库请求依赖项时,Nexus 会在包含的仓库中查找,按照仓库的顺序返回找到的第一个匹配项。这允许组合多个仓库的内容,使其对开发者透明。
在这里插入图片描述

8、创建Proxy

当开发者请求一个依赖项时,Proxy 仓库会首先查看本地是否有缓存的副本。如果没有,它会从远程仓库拉取该依赖项,并在本地缓存一份。这样,在后续的请求中,就可以直接从本地缓存获取而无需再次访问远程仓库。
比如以创建阿里maven代理仓库为例:

https://maven.aliyun.com/nexus/content/groups/public

在这里插入图片描述

9、结论

Nexus Repository Manager作为一款强大的仓库管理系统,在软件开发过程中扮演着关键的角色。通过深入了解其特性和正确的配置方法,团队可以更好地利用Nexus来提高软件构建的效率和可靠性。在今天复杂的软件开发环境中,使用Nexus是确保项目成功的一项重要策略。

通过合理的配置和使用,Nexus将成为团队软件构建过程中的得力助手,确保构建的可靠性、安全性和高效性。


http://www.kler.cn/a/147501.html

相关文章:

  • 数据结构-二叉树及其遍历
  • 从北美火到中国,大数据洞察品牌“STANLEY”的突围之路
  • mybatisPlus打印sql配置
  • [Python学习日记-67] 封装
  • Pytorch如何将嵌套的dict类型数据加载到GPU
  • JSON.stringify的应用说明
  • centos用什么命令可查看版本号
  • Android保活系列之——进程优先级
  • python-爬虫(可直接使用)
  • Element-Plus 图标自动导入
  • 【密码学】【多方安全计算】不经意传输(Oblivious Transfer,OT)
  • JS作用域与作用域链
  • 2.3基于springboot养老院管理系统
  • 【Android知识笔记】性能优化专题(四)
  • springboot+vue实现websocket通信实例,进入页面建立连接
  • 浏览器触发下载Excel文件-Java实现
  • 一些可能被忽视的 Vue3 API 附带案例
  • 5G智慧工地整体解决方案:文件全文115页,附下载
  • Kubernetes之kubeadm日志展示篇—fiendweb日志展示平台部署
  • Jetson orin(Ubuntu20.04)不接显示器无法输出VNC图像解决办法以及vnc安装记录
  • 基于Python的南京二手房数据可视化分析的设计与实现
  • 华为认证 | HCIE必须要培训才能考试?
  • 【Linux】初识重定向(输入输出)
  • c语言新龟兔赛跑
  • Less的函数的介绍
  • wpf 使用 StringFormat