Reposilite--Maven结合最佳实践
前言:
上一期讲解了如何使用docker-compse安装reposilite,本章将讲解Reposilite--Maven结合最佳实践。
配置开发人员(dev),持续集成(devOps)账号:
在reposilite中配置开发人员账号dev,用于拉取私服的jar包
进入web控制台 http://ip:port 使用管理员账号(admin)登录,创建dev,devOps账号,保存相应的密码(密钥)
token-generate dev
token-generate devOps账号授权:
reposilite支持url路由的形式配置权限,我们把dev账号设置为只读,devOps设置为读写,在控制台执行以下命令,命令格式:
route-add <token> <path> <permissions>
permissions:支持 r(读)和w(写)
route-add dev / r
route-add devOps / rw配置仓库权限:
网页管理中找到setting页,选择maven,把release和snapshots仓库的可见性设置为private私有的,即需要通过上一步创建的账号密码访问。

配置仓库的deploy策略:
snapshots仓库支持同版本号多次deploy,release设置为不允许。

maven setting配置:
经过上述步骤reposilite已经配置完毕,更多高级功能,例如代理其他仓库等功能请查阅官方文档https://reposilite.com/guide/mirrors
为了统一管理maven的setting配置,一是不希望每一个项目中都要在pom.xml中定义仓库(repositories)地址,二是为了防止泄露maven私有库的地址和账号密码,三是可以规范统一devOps流程。
maven setting配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 配置阿里云的镜像仓库,加速依赖的拉取,只代理central,jcenter规则的jar -->
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!tanger-releases,!tanger-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<servers>
<server>
<!-- id需要和后面的repository中的id相同,通过此id匹配账号密码 -->
<id>tanger-release</id>
<username>devOps</username>
<password>ddKgsHGW06FA6TTTNqli6D4tq/3J+yP/6OZe8U8z5UP9BOjelAhdyt40hU2FAcIJ</password>
</server>
<server>
<!-- id需要和后面的repository中的id相同,通过此id匹配账号密码 -->
<id>tanger-snapshots</id>
<username>devOps</username>
<password>ddKgsHGW06FA6TTTNqli6D4tq/3J+yP/6OZe8U8z5UP9BOjelAhdyt40hU2FAcIJ</password>
</server>
</servers>
<profiles>
<profile>
<id>default</id>
<properties>
<!--maven-deploy-plugin 2.8之后引入的特性,支持在setting中配置release和snapshots的仓库地址-->
<!--这样就不用在项目的pom里配置distributionManagement-->
<!--执行maven命令的时候也可以"-DaltSnapshotDeploymentRepository=id::layout::url" 来覆盖词配置,达到发布到不同仓库的效果-->
<altReleaseDeploymentRepository>
tanger-release::default::http://192.168.3.32:8089/releases
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
tanger-snapshots::default::http://192.168.3.32:8089/snapshots
</altSnapshotDeploymentRepository>
</properties>
<!--下载依赖使用的远程仓库,按顺序搜索-->
<repositories>
<repository>
<id>central</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>tanger-release</id>
<url>http://192.168.3.32:8089/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>tanger-snapshots</id>
<url>http://192.168.3.32:8089/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>tanger-releases</id>
<url>http://192.168.3.32:8089/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>tanger-snapshots</id>
<url>http://192.168.3.32:8089/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>default</activeProfile>
</activeProfiles>
</settings>以上的配置即可实现提出的三点要求,java项目中,maven使用的setting指向此即可,项目pom无需再配置仓库信息。
altReleaseDeploymentRepository和altSnapshotDeploymentRepository为deploy配置,开发人员账号dev无deploy权限,可以删去此配置。开发人员deploy需要到devOps平台的流水线进行deploy操作,这样可以做到操作数据的留存,是一种合理的规范。
ps:maven的config文件夹中不要保留setting.xml这个配置,否则即使maven命令指定 --setting=xxSetting.xml配置时,也会合并setting.xml的内容,造成配置的不正确。