Building Your Team-Nexus私有Maven环境搭建

工欲善其事,必先利其器。

本文主要总结团队协助中,Nexus私有Maven环境搭建。

下文将分docker环境以及单机环境分别说明

Docker版安装

环境准备

Docker 环境安装

在Linux服务器上安装Docker环境,具体可以参考:https://docs.docker.com/engine/install/ubuntu/

开放端口号

#开放9004端口号 
firewall-cmd --zone=public --add-port=9004/tcp --permanent  
#重载防火墙规则 
sudo firewall-cmd --reload

Nexus工作目录

/data/platform/02_nexus3/workspace

安装配置

Docker环境下安装Nexus

参考https://github.com/sonatype/docker-nexus3

获取nexus镜像
 docker pull sonatype/nexus3
运行nexus

绑定配置

docker run \
   --name nexus \
   -d \
   -u root \
   --restart=always \
   -m 4g \
   -p 9004:8081 \
   -p 9005:9005 \
   -p 9006:9006 \
   -p 9007:9007 \
   -v /data/platform/02_nexus/workspace:/nexus-data \
   -e "INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs" \
   sonatype/nexus3
   
访问jenkins容器
docker exec -it nexus bash
查看日志
docker logs -f nexus
查看镜像与容器信息
docker images  # 查看镜像
docker ps -a  # 查看所有容器服务的状态
docker port nexus  # 查看端口映射
docker inspect nexus #查看容器的具体信息

登录及基础配置

登录nexus

Docker运行nexus成功后,访问:http://ip:port ,第一次登录需要输入管理员密码

异常处理

数据库read only

docker exec  -u root -it nexus /bin/bash
 
find / -name nexus-orient-console.jar
 
java -jar  /opt/sonatype/nexus/lib/support/nexus-orient-console.jar

连接数据库:
CONNECT PLOCAL:/nexus-data/db/component admin admin

#导出数据库
orientdb {db=component}> EXPORT DATABASE /nexus_db_backup/orientdb-component.export
 
#关闭数据库连接
orientdb {db=component}> DISCONNECT
 
#删除有问题的数据库
orientdb> DROP DATABASE PLOCAL:/nexus-data/db/component admin admin
 
#重新创建有问题的数据库
orientdb> CREATE DATABASE PLOCAL:/nexus-data/db/component admin admin
 
#导入数据库
orientdb {db=component}> IMPORT DATABASE /nexus_db_backup/orientdb-component.export.gz
 
#关闭数据库连接
orientdb {db=component}> DISCONNECT
 
#退出控制台
orientdb> EXIT

单机版安装

环境说明

安装服务器:3.163-CentOS release 6.10 (Final)
安装路径:/usr/local/nexus3

访问 Nexus 官网(点击访问),打开下载页面,选择对应版本的下载包下载

cd /usr/local
wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz 

将下载下来的压缩包上传到服务器(比如 /usr/local 目录下),然后进行解压

tar -zxf nexus-3.16.1-02-unix.tar.gz

配置

默认端口为8081,我们可以按需修改配置文件nexus-3.16.1-02/etc/nexus-default.properties

application-port=8081

然后执行如下命令开放 8081 端口:

firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload

启动服务

./nexus-3.16.1-02/bin/nexus start

作为服务运行

链接 $installdir/bin/nexus to /etc/init.d/nexus:

sudo ln -s /usr/local/nexus-3.16.1-02/bin/nexus /etc/init.d/nexus

chkconfig配置

cd /etc/init.d
sudo chkconfig --add nexus
sudo chkconfig --levels 345 nexus on
sudo service nexus start

使用说明

账号设置

只有管理员有权限新增用户

顶部设置按钮->Security->Users-Ceate Local User

创建仓储

以maven仓储为例

默认仓库说明:

  • maven-centralmaven 中央库,默认从 https://repo1.maven.org/maven2/ 拉取 jar
  • maven-releases:私库发行版 jar,初次安装请将 Deployment policy 设置为 Allow redeploy
  • maven-snapshots:私库快照(调试版本)jar
  • maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 或项目 pom.xml 中使用

仓库类型说明:

  • group:这是一个仓库聚合的概念,用户仓库地址选择 Group 的地址,即可访问 Group 中配置的,用于方便开发人员自己设定的仓库。maven-public 就是一个 Group 类型的仓库,内部设置了多个仓库,访问顺序取决于配置顺序,3.x 默认为 ReleasesSnapshotsCentral,当然你也可以自己设置。
  • hosted:私有仓库,内部项目的发布仓库,专门用来存储我们自己生成的 jar 文件
  • snapshots:本地项目的快照仓库
  • releases: 本地项目发布的正式版本
  • proxy:代理类型,从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的 Configuration 页签下 Remote Storage 属性的值即被代理的远程仓库的路径),如可配置阿里云 maven 仓库
  • central:中央仓库

已配置仓储

Maven-android

http://localip:9004/repository/maven-public-android/

Maven-android-release

http://localip:9004/repository/avit-android-release/

Maven-android-snapshot

http://localip:9004/repository/avit-android-snapshot/

拉取制品

以Android为例

打开项目根目录build.gradle

buildscript {

    repositories {
        
        maven{
            url 'http://localip:9004/repository/maven-public-android/'
        }
        
    }
    
	......

}

allprojects {
    repositories {
        
        maven{
            url 'http://localip:9004/repository/maven-public-android/'
        }

    }
}

上传制品

以AndroidStudio为例子

编辑待上传子模块build.gradle,添加如下内容

ext.GROUP="top.lairdli.testaar"
//ext.VERSION_NAME="1.0.0-SNAPSHOT"
ext.VERSION_NAME = PUBLISH_VERSION
ext.POM_ARTIFACT_ID="testaar"

apply from: "${rootProject.ext.nexusMavenUploadScript}"

其中PUBLISH_VERSION定义在gradle.properties

//发布版本
#PUBLISH_VERSION=1.0.0-SNAPSHOT

其中 rootProject.ext.artifactoryMavenUploadScript定义在根build.gradle

ext {
    artifactoryMavenUploadScript = rootProject.file("config/upload/uploadMavenNexus.gradle")
    }

uploadMavenNexus.gradle内容为

apply plugin: 'maven'

afterEvaluate { project ->
    uploadMaven
}

task uploadMaven(group: "upload") {
    upload("uploadMavenNexus");
    dependsOn(uploadMavenNexus)
}

void upload(String name) {
    String path = rootProject.ext.mavenUploadDir + "/" + name + ".properties"

    task "$name"(type: UploadTask, group: "upload") {
        if (path != null) {
            propertiesPath = path;
        }
        versionName = VERSION_NAME;
        group = GROUP;
        id = POM_ARTIFACT_ID;

        parsePropertiesConfig()

        configuration = configurations.archives
        repositories {
            repositories.mavenDeployer {
                repository(url: url) {
                    authentication(
                            userName: userName,
                            password: passWord
                    )
                }
                pom.groupId = group
                pom.artifactId = id
                pom.version = versionName
            }
        }
    }
}

class UploadTask extends Upload {

    String propertiesPath
    def config
    String url
    String userName;
    String passWord
    String group
    String id
    String versionName

    @TaskAction
    def parsePropertiesConfig() {

        println "---------------------->>>>>>>>>>>UploadTask<<<<<<<<<<<<----------------------"
        println "UploadTask---> propertiesPath: $propertiesPath"
        config = new ConfigSlurper().parse(new File(propertiesPath).toURL())
        url = versionName.endsWith("-SNAPSHOT") ? config.snapshotRepositoryUrl
                : config.releaseRepositoryUrl
        userName = config.userName
        passWord = config.passWord
        println "UploadTask---> url: $url"
        println "UploadTask---> userName: $userName"
        println "UploadTask---> password: $passWord"
        println "UploadTask---> archives: $group:$id:$versionName"
    }
}

uploadMavenNexus.properties配置相关账号信息

mavenUrl="http://localip:9004/repository/maven-public-android/"
releaseRepositoryUrl="http://localip:9004/repository/avit-android-release/"
snapshotRepositoryUrl="http://localip:9004/repository/avit-android-snapshot/"
userName="xxx"
passWord="xxx"

参考

  • https://www.sonatype.com/download-nexus-repo-oss

  • https://help.sonatype.com/repomanager3

  • https://help.sonatype.com/docs

  • https://www.hangge.com/blog/cache/detail_2844.html

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值