在Ubuntu上搭建Nexus服务

介绍

Nexus:Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。如Android远程仓库依赖,Java服务端应用程序依赖等,都很方便。

Docker方式

准备

ubuntu上已经安装docker,docker安装过程可以参考笔者另一篇文章。

运行

在docker上安装nexus的步骤提炼自官网,也可以直接参考官方手册(直接看持久化数据章节):Docker

  1. 在宿主机上创建一个卷,用于存放数据:
sudo mkdir -p /usr/local/docker/nexus-data && sudo chown -R 200 /usr/local/docker/nexus-data
  1. 在docker上下载运行(自动下载)nexus镜像
sudo docker run -d -p 8081:8081 --name nexus -v /usr/local/docker/nexus-data:/nexus-data sonatype/nexus3

-d:后台运行容器,并返回容器ID

-p:指定端口映射,格式为:主机(宿主)端口:容器端口

--name:容器名称

-v:绑定一个数据卷

  1. 停止nexus,给足够时间释放资源
sudo docker stop --time=120 nexus

验证

请求html页面:

curl http://localhost:8081

二进制包方式方式:

下载并安装

  1. 下载:Nexus免费版官方下载,若网络环境不好需要上网工具,填写简单的问卷调查单就可以免费下载,Nexus可以支持多种操作系统,这里选择UNIIX版本,地址:Nexus Repository OSS - Software Component Management | Sonatype
  2. 解压:
    1. 将下载后的.tar.gz文件放到/usr/local/
    2. 解压到当前目录,解压后会生成两个目录,分别是nexus-3.43.0-01(安装目录)和sonatype-work(工作目录)。解压指令sudo tar -zxvf nexus-3.43.0-01-unix.tar.gz
bw@bw-linux:/usr/local$ ls -ahl
total 201M
drwxr-xr-x 12 root root 4.0K 1213 13:51 .
drwxr-xr-x 14 root root 4.0K  89 19:48 ..
drwxr-xr-x  2 root root 4.0K  89 19:48 bin
drwxr-xr-x  2 root root 4.0K  89 19:48 etc
drwxr-xr-x  2 root root 4.0K  89 19:48 games
drwxr-xr-x  2 root root 4.0K  89 19:48 include
drwxr-xr-x  3 root root 4.0K  89 19:48 lib
lrwxrwxrwx  1 root root    9 1212 18:26 man -> share/man
drwxr-xr-x 10 root root 4.0K 1213 13:51 nexus-3.43.0-01
-rwxrwxrwx  1 root root 201M 1213 11:05 nexus-3.43.0-01-unix.tar.gz
drwxr-xr-x  2 root root 4.0K  89 19:48 sbin
drwxr-xr-x  7 root root 4.0K  89 19:51 share
drwxr-xr-x  3 root root 4.0K 1213 13:51 sonatype-work
drwxr-xr-x  2 root root 4.0K  89 19:48 src

运行

运行指令:/usr/local/nexus-3.43.0-01/bin/nexus start

验证

请求html页面:

curl http://localhost:8081

Nexus配置

配置前的准备

首先浏览器中进入Nexus管理页面:http://localhost:8081,右上角点击登录,需要提供初始密码:

cat /usr/local/docker/nexus-data/admin.password

随后系统要求修改初始密码,这里修改密码为:***

仓库简单介绍

首先按照上图1、2两步设置和仓库,进入仓库列表页面。列表中只需要关注maven-*相关仓库即可,这里分别对A,B,C三个类型仓库做一个说明:

A:代理,代理中央maven库,来自互联网,具体地址可以点进去看,这里不展开说明。

B:组,打包A,C等库到一起,单点对外提供服务。

C:本机(宿主机)仓库,存放自定义上传库,release-发行库稳定库,snapshots-调试库不稳定库。

添加阿里云代理

添加阿里云,1是可以增加访问国外库速度,2是可以添加中央maven库中没有的资源。

  1. 创建库,点击如下按钮:
  1. 选择maven2(proxy)

  1. 输入仓库名,可随意,这里用aliyun-publick-proxy
  1. 输入阿里仓库地址,https://maven.aliyun.com/repository/public。(这里提供阿里maven仓库集合,可根据自身需求灵活选择:仓库服务 (aliyun.com)
  1. 点击创建仓库后,自动返回仓库列表。由于笔者做安卓开发需要更多库,重复1-4步再添加其他代理库,同理可根据自身开发需求添加一个或多个库。

  1. 将上述新增库添加到组内:仓库列表页点击maven-public, 将新增的库添加到组内,并调整仓库优先级。点击保存。

宿主机仓库配置

宿主机上传使用的地址选择哪个(些)根据团队开发而定,也就是上述的maven-release和maven-snapshots仓库地址。关于上传有一点需要注意,就是是否允许同一版本库重复上传,由于单人/多人协同开发中,maven版本号匹配机制以及本地仓库缓存机制,强烈建议禁用重复上传。这里用maven-release仓库演示,maven-snapshots仓库同理。

  1. 在仓库列表页点击maven-release仓库,进入仓库配置页。
  1. 找到部署规则节点,将其设置为Disable redeploy。点击保存。

使用

建议:上述配置完成后,团队中使用时可能会考虑到权限管理,可以创建开发账号代替管理账号,详细用法可以参考下一章节,权限管理

笔者这里使用开发角色账号做使用演示,管理员角色账号操作相同。

下载

在浏览页面中,拷贝对外暴露的组地址。(代理和宿主机上的仓库,都会从该地址下载。)

maven

maven中使用私服链接下载,在pom.xml中配置。参考阿里配置文档:仓库服务 (aliyun.com)

gradle

gradle7.+版本中使用私服链接下载,在project级build.gradle或者setting.gradle中配置。

pluginManagement {
    repositories {
//        gradlePluginPortal()
//        google()
//        mavenCentral()
        maven{
            allowInsecureProtocol true
            url 'http://172.17.101.51:8081/repository/maven-public/'
        }
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
//        google()
//        mavenCentral()
        maven{
            allowInsecureProtocol true
            url 'http://172.17.101.51:8081/repository/maven-public/'
        }
    }
}
  1. 用私服替换掉所有的默认仓库
  2. 由于私服未采用https,需要加上标志:allowInsecureProtocol true
  3. sync验证

上传

这里使用maven-release库作为上传库,maven-snapshots同理。如果团队规模大,对库稳定性有极高要求,建议同时加上maven-snapshots库,便于测试、维护。在浏览页面中,拷贝maven-release地址。

maven

maven中使用私服链接上传,在pom.xml中配置。参考阿里配置文档:仓库服务 (aliyun.com)

gradle

  1. 配置需要上传模块/库级的gradle文件,这里用的gradle版本是7.+,以Android模块举例:
plugins {
    id 'com.android.library'
    id 'maven-publish'
}

android {
    ...
}

publishing {
    publications{
        maven(MavenPublication){
            artifactId = 'lib_base'
            groupId = 'com.xx.xx.xx'
            version = '1.0.0'
        }
    }
    repositories {
        maven{
            allowInsecureProtocol true
            url 'http://172.17.101.51:8081/repository/maven-releases/'
            credentials {
                username '***'
                password '***'
            }
        }
    }
}

这里只需要配置2步:

    1. 添加插件:maven-publish
    2. 添加publishing任务:publishing{}
  1. 上传
    1. 方式一:Android工程执行根目录通过命令行执行:./gradlew publish
    2. 方式二:双击工程publish任务

上传结果验证

打开nexus管理页面,按下图步骤,进入maven-release库内部,可以看到刚才上传的库

权限管理

在nexus3.x中,默认有admin和anonymous两个角色权限,开发中,如果团队较大,直接把admin权限下放容易被欠缺经验的同学搞崩溃,而anonymous缺少上传库权限,那么就强烈建议创建一个开发者角色:

创建角色

由于nexus默认只有2个角色,因此这里先创建带有固定权限的角色。

  1. 创建角色

  1. 填写基本信息

  1. 分配权限,分配权限的原则是够用就行。这里只需要分配maven-release和maven-snapshots两个库权限,并且尽量不分配两库下:*/delete/admin-edit这三个权限。
  1. 集成匿名角色
  1. 保存并退回到角色列表页面,可以看到刚才创建的角色

创建用户

  1. 点击用户->创建本地用户
  1. 保存后返回用户列表页面可以看到刚才创建的dev用户
  1. 验证

使用-上传章节中的账号密码改为此处创建的角色账号密码,再次执行上传验证。笔者这里已经验证通过就不再详述。

总结

Nexus私服在maven和gradle体系的技术团队中,十分好用。当然大家也可以直接使用阿里现成的maven私库,免费空间足够小型项目使用:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值