jenkins pipline指令碼強化篇
阿新 • • 發佈:2019-01-09
#!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}"
}
}
}
}
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
//清除待部署專案快取及程式碼
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
}
}
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
}
}
stage('傳送郵件通知'){
steps{
emailext body:'''**************************************<br>
Spring3_VIP會員系統測試環境已提測部署<br>
**************************************<br>''', subject: "Spring3_VIP部署", to: "${emailOne} ${emailTwo} ${emailThree}"
}
}
}
}