0
点赞
收藏
分享

微信扫一扫

Jenkins在kubernetes声明式流水线参数化构建案例

@Library('global-shared-library') _
pipeline {
    agent { label 'slave_node' }  //容器环境发布节点(已预安装docker和helm等)
     options{
	  disableConcurrentBuilds()
	}   
    tools {
       maven 'maven3.3.9'     //maven 版本定义(可以不用预先安装,但是需要全局定义变量)
       jdk 'jdk1.8_131'       //可以不用预先安装,但是需要全局定义变量
    }
    parameters {
    
       gitParameter branchFilter: 'origin/(.*)' , defaultValue: 'master' ,name: 'BRANCH', type: 'PT_BRANCH_TAG', useRepository: 'http://bitbucket.xxx.git'   //选择将要构建的分支
	    //mvn 编译命令
        
	  extendedChoice description: '部署环境: \ntest  \nsit  \nuat \n生产环境:暂不提供 ', multiSelectDelimiter: ',', name: 'space', quoteValue: true, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'test27,test56,sit,sit53,uat', visibleItemCount: 10   //部署的环境选择框


    }
    environment {
      //giturl
       GIT_URL="http://bitbucket.xxx.git"
	
	
	  //部署包名称
      testWarName='hermes-api.jar'
 
        test27buildCommand='mvn clean package -pl xxx应用-api -am -Ptest27 -Dmaven.test.skip=true -U'
        sit53buildCommand='mvn clean package -pl xxx应用-api -am -Psit53 -Dmaven.test.skip=true -U'
        uatbuildCommand='mvn clean package -pl xxx应用-api -am -Puat -Dmaven.test.skip=true -U'
        prodbuildCommand='mvn clean package -pl xxx应用-api -am -Pprod -Dmaven.test.skip=true -U'
        graybuildCommand='mvn clean package -pl xxx应用-api -am -Pgray -Dmaven.test.skip=true -U'
          
	  //备份脚本
	  testBackupShellName='/xxx/sh/backup.sh'
	  devBackupShellName='/xxx/sh/backup.sh'
	  //部署脚本  backup stop and start 
	  testDeployShellName='xxx.sh restart'
	  devDeployShellName='xxx.sh restart'
	  //servicename
	  servicename='xxx应用-api'
	  //微信通知 微信接收消息,多人接收xxx|xxxx
      WEICHAT_RECEIVERS='xxx|xxx'  
	  //upload repo 
	  upload_repo="maven-pro/xxx应用-api"
	  //download path
	  download_path="xxx应用-api/target"
	  //传输目标目录
	  targetPath="/home/accountapp/deploy/app/xxx应用-api.jar"
      //SCM中docker文件夹的路径
      dockerDir="xxx应用/xxx应用-api/docker"
	  //制品库二进制包版本号
	  versionNum='V1.1'
      helm_home='xxx/xxx应用-api'   //chat包路径,等调试稳定后上传到harbor仓库中


    } 
  stages {
	           stage('移动dockerfile'){  
            //  when { expression { return (  params.test==false && params.dev==false   )} }   
		      steps {	
			  script{
			     sh "rm -rf /tmp/${JOB_NAME};  mkdir /tmp/${JOB_NAME}; /bin/cp -rf ${env.dockerDir}  /tmp/${JOB_NAME} "
			  }
                  
            
			 }              
          }
           stage('选择分支'){  
		        steps {	
             echo "${WORKSPACE}"
             git credentialsId: 'bitbucket',branch: "${params.BRANCH}", url: "${env.GIT_URL}"        
             }              
          }
          stage("获取发布分支"){
		           steps{
		            //定义环境:此函数是用来去除分支名称上的”/“ ,在docker的tag上不能出现”/“
		       		script{
                       env.BRANCHL=branchDeSlash(params.BRANCH)   							
		       		}
		           }
		        }
       stage("定义版本号"){
	       
		    steps{
		     //定义版本号:
				script{
				   def date=new Date().format("yyyy-MM-dd_HH_mm_ss")
                   def version="${date}-${env.servicename}-${env.BRANCHL}-${BUILD_NUMBER}"
                   echo "version:${version}"
                   env.versionN=version      							
				}
		    }
		   }	
            stage("获取发布环境空间"){
		           steps{
		            //定义环境:
		       		script{
                       def tempspace=params.space
                       tempspace=tempspace.replaceAll("\"","")
		       		   echo "\033[7m environments:${tempspace} \033[0m"  
                       env.space=tempspace   							
		       		}
		           }
		        }
            stage("定义环境变量"){  
                steps{
                    script{
                        if ( "${env.space}" == "test27" ) {
                            env.space="test" //namespace
                            env.buildCommand=env.test27buildCommand
                            env.nodeport=31101
                            env.nodeport1=31103
                        }
                        if ( "${env.space}" == "test56" ) {
                            env.space="test-xxx应用"
                            env.buildCommand=env.test56buildCommand
                            env.nodeport=31104
                            env.nodeport1=31105

                        }
                        if ( "${env.space}" == "sit53" ) {
                            env.space="dev"
                            env.buildCommand=env.sit53buildCommand
                            env.nodeport=31106
                            env.nodeport1=31107

                        }
                        if ( "${env.space}" == "uat" ) {
                            env.space="uat"
                            env.buildCommand=env.uatbuildCommand
                            env.nodeport=31108
                            env.nodeport1=31109

                        }
                        if ( "${env.space}" == "sit" ) {
                            env.buildCommand=env.sitbuildCommand
                            env.nodeport=31110
                            env.nodeport1=31111
                            env.space="quasi-prod"

                        }

                    }
                   
                }
            }
	  stage("生成制品包"){
        
		      steps {
			     script{
				    sh "${env.buildCommand}"
                 }				  
    				echo "编译 complete"
               }   
		
		}
    		   
      stage('构建镜像'){
	    // when { expression { return (  params.test==false && params.dev==false   )} }
          steps {
                echo 'make docker images'
				echo "${WORKSPACE}"
				echo "${JOB_NAME}"
               //Jenkins机器:编译完成后,build生成一个新版本的镜像,push到远程docker仓库
			   script{
			        sh "/bin/cp -rf /tmp/${JOB_NAME}/docker  .  "
				     sh  " cd ${WORKSPACE}/docker && /bin/bash docker_build.sh  ${WORKSPACE}/${download_path}/${testWarName}  ${WORKSPACE}/docker  ${env.versionN}  app/${env.servicename} "
				  
	
               }			   
          }
        } 
	   stage('deploy-test'){
	     steps{          
		  script{
		  sh " helm repo update "
          sh "cd ${helm_home};helm upgrade ${env.servicename} --install  --set service.nodePort=${nodeport} --set service.nodePort1=${nodeport1} --set service.port=9011 --set service.port1=9012 --set image.tag='${env.versionN}'  ./${servicename} -n ${env.space}"  //测试时使用

		  }
		   echo "test deploy complete"
		 }
	   }
	}
    post {
       success {
	      script{
		      sh "python /xxx/weixin.py \'${env.WEICHAT_RECEIVERS}\' '${currentBuild.fullDisplayName} Deploy Successed!' '${env.BUILD_URL}'"
			  }
       }
       failure {
	      script{
		      sh "python /xxx/weixin.py \'${env.WEICHAT_RECEIVERS}\' '${currentBuild.fullDisplayName} Deploy Failed!' '${env.BUILD_URL}'"
			  }
       }   
       aborted{
	      script{
		      sh "python /xxx/weixin.py \'${env.WEICHAT_RECEIVERS}\' '${currentBuild.fullDisplayName} Deploy aborted!' '${env.BUILD_URL}'"
			  }
        }
    }
}


举报

相关推荐

0 条评论