tanger
发布于 2024-01-15 / 5 阅读 / 0 评论 / 0 点赞

Reposilite--Maven结合最佳实践

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的内容,造成配置的不正确。


评论