1. 程式人生 > >jenkins pipline指令碼強化篇

jenkins pipline指令碼強化篇

#!groovy
pipeline {
    //在任何可用的代理上執行Pipeline
    agent any
    //引數化變數,目前只支援[booleanParam, choice, credentials, file, text, password, run, string]這幾種引數型別,其他高階引數化型別還需等待社群支援。
    parameters {
    //git程式碼路徑【引數值對外隱藏】
    string(name:'repoUrl', defaultValue: 'ssh://****@git.wowocai.com:29418/spring/java', description: 'git程式碼路徑')
    //repoBranch引數後續替換成git parameter不再依賴手工輸入,JENKINS-46451【git parameters目前還不支援pipeline】
    string(name:'repoBranch', defaultValue: 'master', description: 'git分支名稱')
    //編譯目錄的相對路徑
    string(name:'buildPath', defaultValue: 'spring3-websites/', description: '編譯目錄')
    //war包的名稱
    string(name:'warName', defaultValue: 'spring3-websites', description: 'war包的名稱')
    //部署程式碼所在IP
    string(name:'serverIP', defaultValue: '192.168.10.113', description: '部署程式碼所在ip地址')
//目標服務
    string(name:'proName', defaultValue: 'spring_vip_mobile', description: '目標服務')
//需要清理的檔案
    //string(name: 'cleanPath',defaultValue:'/home/spring_vip_mobile/work/*,\n/home/spring_vip_mobile/temp/*', description: '需要清理的檔案')
string(name: 'cleanPath',defaultValue:'/home/spring_vip/webapps/spring3-websites,\n/home/spring_vip/webapps/spring3-websites.war', description: '需要清理的檔案')
    //目標服務的絕對路徑
    string(name:'proPath', defaultValue: '/home/spring_vip/webapps/', description: '目標服務的絕對路徑')
//重啟指令碼路徑(備份檔案地址、備份檔名稱、執行目錄)
string(name:'shellpath', defaultValue: '/home/spring_vip/shback/,\nspring3-member.sh,\n/home/spring_vip/webapps/spring3-websites/spring3-member/build/libs/', description: '備份檔案地址、備份檔名稱、執行目錄')
//郵件接收人
string(name:'email', defaultValue: 'alina.zou,\nsable.song,\napril.he', description: '郵件接收人')
    }
    //常量引數,初始確定後一般不需更改
    environment{
        //git服務全系統只讀賬號cred_id【引數值對外隱藏】
        CRED_ID='********-***********-**********-**********'
    }
    options {
        //保持構建的最大個數
        buildDiscarder(logRotator(numToKeepStr: '10')) 
    }
    
    //pipeline的各個階段場景
    stages {
        stage('清理工作空間') { 
            steps {
                cleanWs()
                  }
        }
        
        stage('程式碼獲取') {
            steps {
            //根據param.server分割獲取引數,包括IP,jettyPort,username,password
            script {
                def split=params.cleanPath.split(",")
                cleanPathOne=split[0]
cleanPathTwo=split[1]
            }
//獲取備份檔案地址、備份檔名稱、執行目錄
script{
def split=params.shellpath.split(",")
                shbackPath=split[0]
shbackName=split[1]
shfile=split[2]
}
//獲取email接收人
script{
def split=params.email.split(",")
                emailOne=split[0]
emailTwo=split[1]
emailThree=split[2]
}
              // Get some code from a GitHub repository
              git credentialsId:CRED_ID, url:params.repoUrl, branch:params.repoBranch
            }
        }
        
        stage('編譯') {
            steps {
              //根據編譯路徑打包
              echo "starting build in ${workspace}/${params.buildPath} ......"
              // Get some code from a GitHub repository
              sh "cd ${params.buildPath} && gradle clean build"
  sh "jar -cvfM ${params.warName}.war ${params.warName}"
            }
        }


stage('預處理目標伺服器服務環境'){
steps{
//停止目標tomcat服務
sh "ssh -f -n
[email protected]
${params.serverIP} 'ps -ef|grep ${params.proName}/|grep -v grep|cut -c 9-15|xargs kill -9'"
//清除待部署專案快取及程式碼
sh "ssh -f -n [email protected]${params.serverIP} rm -rf ${cleanPathOne} ${cleanPathTwo}"
}
}
            
        stage('推送測試包'){ 
            steps {
             echo "starting deploy to ${params.serverIP}......"
             //釋出jar包到指定伺服器
             sh "scp ${params.warName}.war
[email protected]
${params.serverIP}:${params.proPath}"
            }
        }


stage('部署服務'){
steps{
//解壓war包
sh "ssh -f -n [email protected]${params.serverIP} unzip ${params.proPath}${params.warName}.war -d ${params.proPath}"
}
steps{
//複製sh檔案
sh "ssh -f -n [email protected]${params.serverIP} cp ${shbackPath}${shbackName} ${shfile}"
}
steps{
//執行sh檔案重啟專案
sh "ssh -f -n
[email protected]
${params.serverIP} ${shfile}${shbackName} -p preprod"
}
}

stage('傳送郵件通知'){
steps{
emailext body:'''**************************************<br>
Spring3_VIP會員系統測試環境已提測部署<br>
**************************************<br>''', subject: "Spring3_VIP部署", to: "${emailOne} ${emailTwo} ${emailThree}"
}
}

    }
}