nexus配置的一些实践

nexus的一些实践,本文基于centos 7,其他系统差异不大。nexus的安装参见在Docker上部署Nexus

1.代理仓库的配置

1.1 概述

拉取的时候,应该统一依赖group类型的仓库,push的时候,区分SnapShot和Release。

1.2 仓库类型说明

仓库有三种类型:

  • proxy,代理远程仓库,为maven_center或者aliyun的maven镜像进行代理
  • hosted,本地仓库,传你自己的jar包或者本地docker镜像
  • group,集合所有的其他仓库

如下图:

仓库类型和说明

1.3 存储说明

不设置时,会使用默认存储。不过最好还是为每一类仓库设置一个Blob Store,参考如下:
Blob Stores

1.4 maven

1.4.1 概述

nexus默认已经带了一个maven-public。
对maven类型的依赖,应统一依赖maven-public,其他三方仓库通过proxy的形式代理之后,由maven-public进行成员管理即可。并且不要再添加其他的group类型的maven仓库
maven-public的成员管理,需要先创建其他proxy类型的代理仓库,常见的代理仓库有:maven-centre、aliyun、google、jecenter、maven-gradle-plugin。

1.4.2 maven-public

统一设置为如下图:
maven-public

1.4.3 maven-aliyun

Remote Storage设置为:https://maven.aliyun.com/repository/public,其他使用默认即可,参考下图:
maven-aliyun

1.4.4 其他maven代理仓库

其他代理
修改maven-centreRemote Storage设置为:https://repo1.maven.org/maven2/,其他使用默认即可
新增maven-gradle-pluginRemote Storage设置为:https://plugins.gradle.org/m2/,其他使用默认即可
新增jcenterRemote Storage设置为:https://jcenter.bintray.com,其他使用默认即可
新增googleRemote Storage设置为:https://maven.google.com,其他使用默认即可

1.5 docker

1.5.1 概述

同maven一致,先创建一个group类型的docker-group仓库。
但是需要注意:一般通过域名直接访问docker的repo,而你的域名已经给了nexus,所以最好为这个docker-group设置端口,并新增一个二级域名指向nexus的这个端口,参见下图。
docker-group

1.5.2 其他容器代理仓库

新增docker-hub:Remote Storage设置为:https://registry-1.docker.io,其他使用默认即可
新增k8s:Remote Storage设置为:https://k8s.gcr.io,其他使用默认即可
新增ghcr:Remote Storage设置为:https://ghcr.io,其他使用默认即可

1.6 代理的加速问题

maven和docker的几个镜像仓库,例如:k8s(https://k8s.gcr.io)、google(https://maven.google.com),本身就需要加速,所以如果你的nexus服务器不能访问国外,那么nexus也无法有效同步。
代理设置如下:
镜像的加速
这里的http代理,就有很多办法了,需要你自行解决。
如果你的nexus是企业用,那么你就应该在公司找一台服务器,通过ssr进行代理,并通过Privoxy转换为http代理,并暴露在内网,这样就可以在nexus使用这个代理了。可以参考这篇文章:privoxy和ssr为内网提供http代理加速

2.权限-运维

2.1 概述

主要通过nv_maven_write和nx_maven_web_view两个角色来管理:
nv_maven_write负责工程依赖的读写权限,没有删除权限
nx_maven_web_view负责web页面浏览的权限,没有写和删除权限。
图片
目前所有nexus的账号默认应拥有如下权限
maven-public的读,maven-public已包含所有maven相关仓库的集合,所以只需要读这个即可,如果后续添加其他仓库的景象,只需要在maven-public添加集合即可。
maven-releases的写
maven-snapshots的写
这些权限已通过“nv_maven_write”授予

2.2 创建默认角色的配置

目前这个配置授予了"default_role_for_new_user"这个角色
图片

2.3 启用默认角色

图片

2.4 默认角色权限管理

目前“default_role_for_new_user”这个角色包含“nv_maven_write”的角色,也可以增设别的角色
图片

2.5 角色的具体权限配置

2.5.1 nv_maven_write

这是目前的主权限,包含:
maven-public的读
maven-releases的写
maven-snapshots的写
图片

2.5.2 nx_maven_web_view

拥有对所有依赖仓库的web版本的浏览权限,一般大家并不需要,所以没有授予给默认角色。
主要是browse和read类型的权限。

3.存储-运维

3.1 概述

在研发工程中,会产生大量的snapshot包,这些包会占用存储,但生命周期短暂。
nexus提供定时清理的任务进行清理。

nexus的清理分为:策略(明确清理策略)->任务(执行策略)->任务(物理删除)。
其中,执行策略这一步,仅仅是做了软删除,需要另一个任务进行物理清理。

3.2 action-创建策略

在admin->Repository->Cleanup Policies里,可以创建策略。
你可以选择基于上传时间、最后被人使用的时间等维度,针对不同的artifact类型,选择不同的仓库。

接下来,在Repository里,选择指定的repo,关联上这个策略即可。

3.3 任务-执行策略

在admin-System->Tasks里,系统自动创建了对应的任务,名称应该是Cleanup service.
这个任务会对执行所有的clean up策略,并将满足条件的artifact标记为软删除,此时,磁盘空间依然被占用

3.4 任务-物理删除

依然在admin-System->Tasks里,你需要手动创建一个Task,选择类型:Admin-Compact blob store Task,并指定存储Blob store
一旦执行任务,所有满足条件的被软删除的artifact会被物理删除,磁盘空间将得到释放。