maven私服搭建及数据迁移

时间:2022-07-22
本文章向大家介绍maven私服搭建及数据迁移,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

docker部署nexus

使用docker的方式部署,在创建容器之前先创建好存放nexus的数据目录

mkdir -p /export/server/nexus3-server/data
chown -R 200 /export/server/nexus3-server/data

启动容器

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

启动过程比较慢,耐心等待几分钟,可以通过查看日志来看启动过程

docker logs -f nexus-server

另外nexus私服在启动时可以指定jvm参数,例如:

-e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g

访问测试

ip:8082

用户名:admin 密码:admin123

迁移

直接备份nexus的整个数据目录,要迁移的数据为老的私服数据,目录在 $HOME/sonatype-work/nexus3目录下

# tree -L 1
.
├── backup
├── blobs
├── cache
├── db
├── elasticsearch
├── etc
├── generated-bundles
├── health-check
├── instances
├── javaprefs
├── kar
├── keystores
├── lock
├── log
├── orient
├── port
├── restore-from-backup
├── tmp
└── upgrades

把这些目录进行打包,可以排除cache(如果把此目录打包进去,在迁移结束,启动之前要将cache目录删除掉,否则会启动失败)和log目录打包

tar zcvf nexus_data.tgz --exclude=cache --exclude=log

开始迁移前需要将nexus服务停掉

docker contaienr stop nexus-server

然后解压,重启容器即可,完成后,便可进行访问测试

以上是maven的私服仓库搭建和数据迁移,下面是maven的settings.xml文件参考

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="https//maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="https//www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https//maven.apache.org/SETTINGS/1.0.0 https//maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>/data/maven/repository/</localRepository>
    <servers>
        <server>
            <id>maven-releases</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>

        <server>
            <id>maven-public</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>
        // 这里的id cdvcloud 是我们在nexus上单独配置的一个hosted类型的私有仓库,用来存放自有的一些依赖包等
        // 这里的id 也要和仓库名对应起来
        <server>
            <id>cdvcloud</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>

        <server>
            <id>maven-snapshots</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>
        <server>
                <id>docker-hub</id>
                <username>admin</username>
                <password>Harbor12345</password>
                <configuration>
                        <email>邮箱</email>
                </configuration>
        </server>
    </servers>
    //先找本地缓存,本地没有,再找本地私服,本地私服没有,再找网络上的阿里仓
    <mirrors>
        <mirror>
            <id>maven-local</id>
            <name>maven-local</name>
            <mirrorOf>maven-local</mirrorOf>
            <url>/data/maven/repository/</url>
        </mirror>

        <mirror>
            <id>maven-public</id>
            <name>maven-public</name>
            <mirrorOf>maven-public</mirrorOf>
            <url>http://私服域名/repository/maven-public/</url>
        </mirror>

        <mirror>
            <id>aliyun-public</id>
            <name>aliyun-public</name>
            <mirrorOf>center</mirrorOf>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>

    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>

    <profiles>
        <profile>
            <id>nexus</id>
            <activation>  
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>

		<repository>
                    <id>cdvcloud</id>
                    <url>http://私服域名/repository/cdvcloud/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>

                <repository>
                    <id>maven-releases</id>
                    <url>http://私服域名/repository/maven-releases/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
                <repository>
                    <id>alimaven</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
                <repository>
                    <id>maven-snapshots</id>
                    <url>http://私服域名/repository/maven-snapshots/</url>
                    <releases>
                        <enabled>false</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>

        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <sonar.jdbc.url>jdbc:postgresql://192.168.0.130:8084/sonar</sonar.jdbc.url>
                <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
                <sonar.jdbc.username>sonar</sonar.jdbc.username>  
                <sonar.jdbc.password>Sonar@123</sonar.jdbc.password> 
                <sonar.host.url>http://sonar域名</sonar.host.url> 
            </properties>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>nexus</activeProfile>
        <activeProfile>sonar</activeProfile>
    </activeProfiles>
</settings>

以上为公司在使用的配置文件,仅供参考。

nexus配置参考

创建两个仓库,一个专门存放私有包的,另一个用来做代理阿里仓库的

配置完上面两个仓库后,需要最后在public中引用下

角色授权

全部仓库可读

开发者的权限

上传jar包的权限

一个私服代理另一个私服

比如生产环境和测试环境都需要一个私服,但是在平时的开发过程中,测试环境的私服里的私有包经常会变化,如果要定期对测试环境的私服做迁移,工作量则会有点大,所以通过代理的方式,线上私服代理测试私服。

线上nexus配置参考

中央仓库代理的便是测试私服的私有包仓库

还有一个是代理的阿里公仓

下面是maven的参考

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="https//maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="https//www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https//maven.apache.org/SETTINGS/1.0.0 https//maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>/data/maven/repository/</localRepository>
    <servers>
        <server>
            <id>maven-releases</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>

        <server>
            <id>maven-public</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>
        // 这里的id cdvcloud 是我们在nexus上单独配置的一个hosted类型的私有仓库,用来存放自有的一些依赖包等
        // 这里的id 也要和仓库名对应起来
        <server>
            <id>cdvcloud</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>

        <server>
            <id>maven-snapshots</id>
            <username>jenkins</username>
            <password>密码</password>
        </server>
        <server>
                <id>docker-hub</id>
                <username>admin</username>
                <password>Harbor12345</password>
                <configuration>
                        <email>邮箱</email>
                </configuration>
        </server>
    </servers>
    //先找本地缓存,本地没有,再找本地私服,本地私服没有,再找网络上的阿里仓
    <mirrors>
        <mirror>
            <id>maven-local</id>
            <name>maven-local</name>
            <mirrorOf>maven-local</mirrorOf>
            <url>/data/maven/repository/</url>
        </mirror>

        <mirror>
            <id>maven-public</id>
            <name>maven-public</name>
            <mirrorOf>maven-public</mirrorOf>
            <url>http://私服域名/repository/maven-public/</url>
        </mirror>

        <mirror>
            <id>aliyun-public</id>
            <name>aliyun-public</name>
            <mirrorOf>center</mirrorOf>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>

    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>

    <profiles>
        <profile>
            <id>nexus</id>
            <activation>  
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>

		<repository>
                    <id>cdvcloud</id>
                    <url>http://私服域名/repository/cdvcloud/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>

                <repository>
                    <id>maven-releases</id>
                    <url>http://私服域名/repository/maven-releases/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
                <repository>
                    <id>alimaven</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
                <repository>
                    <id>maven-snapshots</id>
                    <url>http://私服域名/repository/maven-snapshots/</url>
                    <releases>
                        <enabled>false</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>

        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <sonar.jdbc.url>jdbc:postgresql://192.168.0.130:8084/sonar</sonar.jdbc.url>
                <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
                <sonar.jdbc.username>sonar</sonar.jdbc.username>  
                <sonar.jdbc.password>Sonar@123</sonar.jdbc.password> 
                <sonar.host.url>http://sonar域名</sonar.host.url> 
            </properties>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>nexus</activeProfile>
        <activeProfile>sonar</activeProfile>
    </activeProfiles>
</settings>