jenkins学习笔记之十七:使用插件及maven上传制品到nexus

简介: jenkins学习笔记之十七:使用插件及maven上传制品到nexus

一、docker安装nexus

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all  && yum makecache fast
um install docker
systemctl start docker
docker pull sonatype/nexus3:3.49.0
docker run -itd -p 8081:8081 --privileged=true --name nexus3 -v /data/nexus-data:/var/nexus-data --rest:3.49.0
docker ps
netstat -tnlp
docker exec -it nexus3 /bin/bash
/nexus-data/admin.password

二、创建仓库

三、使用插件上传制品

1.安装插件

查看插件使用帮助

3.创建nexus的sharelibrary及jenkins file调用

nexus.groovy

pakcage org.devops
//获取POM中的坐标
def GetGav(){
   //上传制品
    def jarName = sh returnStdout: true, script: "cd target;ls *.jar"
    env.jarName = jarName - "\n"
    
    def pom = readMavenPom file: 'pom.xml'
    env.pomVersion = "${pom.version}"
    env.pomArtifact = "${pom.artifactId}"
    env.pomPackaging = "${pom.packaging}"
    env.pomGroupId = "${pom.groupId}"
    
    println("${pomGroupId}-${pomArtifact}-${pomVersion}-${pomPackaging}")
    // 以上变量使用env定义为全局变量此处可以不return
    return ["${pomGroupId}","${pomArtifact}","${pomVersion}","${pomPackaging}"]
}
//Nexus plugin deploy
def NexusUpload(){
    //use nexus plugin
    nexusArtifactUploader artifacts: [[artifactId: "${pomArtifact}", 
                                        classifier: '', 
                                        file: "${filePath}", 
                                        type: "${pomPackaging}"]], 
                            credentialsId: 'nexus-admin', 
                            groupId: "${pomGroupId}", 
                            nexusUrl: '192.168.1.134:8081', 
                            nexusVersion: 'nexus3', 
                            protocol: 'http', 
                            repository: "${repoName}", 
                            version: "${pomVersion}"
}
//mvn deploy repositoryId需要和Maven中设置的ID保持一致
def MavenUpload(){          
    def mvnHome = tool "M3"
    sh  """
        cd target/
        ${mvnHome}/bin/mvn deploy:deploy-file -Dmaven.test.skip=true  \
                                -Dfile=${jarName} -DgroupId=${pomGroupId} \
                                -DartifactId=${pomArtifact} -Dversion=${pomVersion}  \
                                -Dpackaging=${pomPackaging} -DrepositoryId=maven-hosted \
                                -Durl=http://192.168.1.134:8081/repository/maven-hosted 
        """
}
//制品晋级
def ArtifactUpdate(updateType,artifactUrl){
    //晋级策略
    if ("${updateType}" == "snapshot -> release"){
        println("snapshot -> release")
        //下载原始制品
        sh "  rm -fr updates && mkdir updates && cd updates && wget ${artifactUrl} && ls -l "
        //获取artifactID 
        
        artifactUrl = artifactUrl -  "http://192.168.1.134:8081/repository/maven-hosted/"
        artifactUrl = artifactUrl.split("/").toList()
        
        println(artifactUrl.size())
        env.jarName = artifactUrl[-1] 
        env.pomVersion = artifactUrl[-2].replace("SNAPSHOT","RELEASE")
        env.pomArtifact = artifactUrl[-3]
        pomPackaging = artifactUrl[-1]
        pomPackaging = pomPackaging.split("\\.").toList()[-1]
        env.pomPackaging = pomPackaging[-1]
        env.pomGroupId = artifactUrl[0..-4].join(".")
        println("${pomGroupId}##${pomArtifact}##${pomVersion}##${pomPackaging}")
        env.newJarName = "${pomArtifact}-${pomVersion}.${pomPackaging}"
        
        //更改名称
        sh " cd updates && mv ${jarName} ${newJarName} "
        
        //上传制品
        env.repoName = "maven-release"
        env.filePath = "updates/${newJarName}"
        NexusUpload()
    }
}
def main(uploadType){
    GetGav()
    if ("${uploadType}" == "maven"){
        MavenUpload()
    } else if ("${uploadType}" == "nexus") {
        env.repoName = "maven-hosted"
        env.filePath = "target/${jarName}"
        NexusUpload()
    }
}

ci.jenkinsfile(新增以下两行代码)

def nexus = new org.devops.nexus() #引用


nexus.main("nexus") #在想要的阶段调用                  

4.修改代码版本名称

5.验证

四、使用Maven上传制品

1.配置nexus仓库认证

修改Maven settings.xml文件

2.创建nexus的sharelibrary及jenkins file调用

sharelibrary文件使用上一步,已经集成,需要注意的是Maven需要在全局工具中已经配置

jenkins file修改传参即可

3.验证

五、优化制品名称

默认制品是固定的,最终只有一个制品,这里可以对每个制品添加时间戳进行区分

1.修改pom文件

Maven项目中,打开pom.xml文件,并在<build>元素下添加以下代码:

如果是jar包:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
      <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
    </configuration>
  </plugin>
</plugins>

如果是war包:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
      <warName>${project.artifactId}-${project.version}-${timestamp}</warName>
    </configuration>
  </plugin>
</plugins>

2.修改mvn打包命令

clean package -DskipTests  -Dtimestamp=$(date +%Y%m%d%H%M%S)  #添加-Dtimestamp=$(date +%Y%m%d%H%M%S)

3.验证

相关文章
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
240 80
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
24天前
|
Java 编译器 测试技术
全面理解Maven Compiler Plugin-Maven编译插件
【10月更文挑战第16天】
145 1
|
1月前
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
167 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
3月前
|
Kubernetes jenkins 持续交付
Jenkins 插件生态:提升自动化能力
【8月更文第31天】Jenkins 是一个开源的持续集成/持续交付(CI/CD)平台,广泛应用于软件开发的各个阶段。Jenkins 的一大特色就是其丰富的插件生态系统,这些插件极大地扩展了 Jenkins 的功能,使其能够适应各种各样的应用场景。本文将深入探讨 Jenkins 的插件生态系统,并指导如何选择和配置插件以满足特定需求。
179 1
|
3月前
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
|
3月前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
3月前
|
jenkins Java 持续交付
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
|
3月前
|
jenkins 持续交付
jenkins学习笔记之十八:nexus制品获取及晋级
jenkins学习笔记之十八:nexus制品获取及晋级
|
7天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
55 8
|
5天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
16 3

推荐镜像

更多