一般java maven项目的jenkins发布pipeline流水线分享

一般业务cicd一直基于jenkins来实现这里来分享一篇关于maven项目的流水线构建分享。业务代码是在gitlab上,下面是自动构建-编译-部署的全过程
编译完成jar包放置在自己搭建nginxweb服务器上。
直接上pipeline代码

pipeline {
    agent { label 'master'}
environment { 
        //改成你的git 凭证
        gitsec='xxx'  
        //#改成你的git地址
        giturl='xxx'  
	    propath='$PWD'
	    //#是否执行清除
	    is_clear='true'  
	    // #是否执行scm
	    is_check='true'
	    //#是否执行编译
	    is_build='true' 
	    // #是否规定jar包到web服务器
	    is_archivejar='true' 
	    //#是否部署。。。。钉钉消息通知这里没有加上,需要的我给你发
		is_deploy='true'  
		// #jar包归档目录
		archivedir='/data/nginx/jar/all'  
		/ /#远程ssh启动脚本目录 ,这个脚本很关键。是放置在节点上的。需要的话我发你
		restartsh='/data/jar/jardeploy.sh' 
		//hosts='node'   这个变量在单节点启用,有时候我们的模块jar包分散在不同的服务器上,这个一个远程节点就有点不适用了
		//这是jar包的版本,取ssh  的date来做
		JARVERSION = "${sh(returnStdout: true, script: 'date +\'%Y%m%d%H%M%S\'').trim()}"
    }
       tools{
	maven "obt"
}
	parameters {
//这里添加两个参数,一个是git分支参数,这里需要改下你的defaultValue和
//useRepository的值
    gitParameter(branchFilter: 'origin.*/(.*)', defaultValue: 'test', name: 'CODEBRANCH', type: 'PT_BRANCH', useRepository: '.*xxx.git')
   //一个是需要部署的模块名称,模块名字最好被你target的jar包包含,
   //比如模块是xxx  编译出来的jar包最好是xxx.jar或者xxx-1.0.0.jar 这里需要你修改defaultValue和value
    extendedChoice defaultValue: 'xxx', description: '选择部署模块', multiSelectDelimiter: ',', name: 'modulesname', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'module1,module2,module3', visibleItemCount: 5
    }
stages {
  stage('gitbranch') {
            steps {
                git credentialsId: gitsec ,branch: CODEBRANCH , url: giturl
            }
        }
  stage(clean){
       when { environment name: 'is_clear', value: 'true' }
		steps {cleanWs()}
		}
  stage('printenv') {
         steps {
             script{
            sh 'printenv'
               }}
                    }
  stage('check') {
      when { environment name: 'is_check', value: 'true' }
         steps {
        checkout([$class: 'GitSCM', branches: [[name: CODEBRANCH]], extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]], userRemoteConfigs: [[credentialsId: gitsec, url: giturl ]]])
		       }
                 }
    stage('bulidjar') {
        when { environment name: 'is_build', value: 'true' }
         steps {
        sh """
		mvn clean package 
		"""
		       }
                 }
    stage('archivejar') {
     when { environment name: 'is_archivejar', value: 'true' }
     steps {
         sh "mkdir -p $archivedir/$JARVERSION"
         script{
             def server = env.modulesname.split(',')
             for (i in server){
		     sh   """
		     find $WORKSPACE -name "${i}*jar"|xargs -i cp {} $archivedir/$JARVERSION
		     """
            if (env.msg){
                env.msg=env.msg+"sh ${restartsh} ${i} ${JARVERSION} \n"
            }
            else{env.msg="${modulesname}服务发版 \nsh ${restartsh} ${i}  ${JARVERSION} \n"}
             }
            
        }
        echo "$msg"
     }
    }
	stage('deploy') {
     when { environment name: 'is_deploy', value: 'true' }
     steps {
         script{
         //这里需要你改下你的模块和部署节点的对应关系。这个好就是env中的那个hosts参数。我这是sshkeygen免密登录的。
def modules_list=["module1":"node1","module1":"node2"]
             def server = env.modulesname.split(',')
             for (i in server){
             hosts = modules_list["${i}"]
		     sh   """
		     ssh $hosts "sh $restartsh ${i}  ${JARVERSION}"
		     """
             }
            
        }
     }
    }
    
}
    
}

前两次运行需要加载变量。失败没有问题,等成功了差不多是这个样子,
第一个参数时分支
第二个是模块可多选
在这里插入图片描述
运行时候是这个样子,在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值