jenkins 使用pipeline 添加git倉庫裏的maven項目自動化部署管理 腳本示例

編寫自動化部署腳本之前要先確認git 插件  maven插件以及setting文件設置  jdk 插件都已經安裝並配置到jenkins中

腳本實現思路

1.將git 項目下載到jenkins的工作空間裏 /var/lib/jenkins/workspace

2.使用maven 打包構建項目

3.上傳文件夾構建腳本到目標服務器

3-1.修改文件夾構建腳本中項目路徑變量爲當前項目路徑

3-2.並執行構建不存在的目標文件夾 然後刪除文件夾構建腳本

4.上傳jar包到目標服務器

5.上傳執行腳本到目標服務器

5-1.修改執行腳本中的jar包全路徑變量爲當前項目jar包全路徑

6.執行啓動腳本

 

jenkins pipeline腳本示例:

node () {
def workspace = pwd()
user='root'
passwd='*******'
project_name='scf-gateway'
jar_name='scf-gateway-1.0.0-SNAPSHOT.jar'
server_path='/var/lib/jenkins/workspace/server.sh'
haveDivectory_path='/var/lib/jenkins/workspace/haveDivectory.sh'
currentpath='/data/'+project_name+'/'+jar_name
project_path='/data/'+project_name+'/'
	/**
	* 項目檢出 新項目複製腳本只需要修改project_name 和 jar_name 兩個變量 在項目結構不一致情況下需注意下方兩個註釋處區別
	**/
  stage 'checkout'
     git branch: branches, credentialsId: 'git_account', url: 'http://192.168.0.246:2080/scf-ms/scf-gateway.git'
    
	 /**
     * 項目構建 當項目結構爲單項目體結構時使用"cd $workspace/"  項目結構爲多項目結構式使用 "cd $workspace/$project_name/"
     **/
	stage 'Build'
    sh """
        cd $workspace/
        /usr/local/maven/apache-maven-3.6.1/bin/mvn clean install -Dmaven.test.skip=true -P $activation
 """
	
	stage 'delete_old'
    sh """sshpass  -p '$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$environment_ip' "rm -rf  $currentpath && rm -rf /data/$project_name/server.sh"
    """
     /**
     * 上傳文件 當項目結構爲單項目體結構時使用"cd $workspace/target"  項目結構爲多項目結構式使用 "cd $workspace/$project_name/target"
     **/
    stage 'upload'
    sh """
    cd $workspace/target
	sshpass -p '$passwd' scp -o StrictHostKeyChecking=no '$haveDivectory_path' '$user'@'$environment_ip':/haveDivectory.sh
	sshpass  -p '$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$environment_ip'  "sed -i 's#targetServerPath#$project_path#g' /haveDivectory.sh"
	sshpass  -p '$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$environment_ip' "cd / && sh haveDivectory.sh && rm -rf haveDivectory.sh"
    sshpass -p '$passwd' scp -o StrictHostKeyChecking=no '$jar_name' '$user'@'$environment_ip':$currentpath
    sshpass -p '$passwd' scp -o StrictHostKeyChecking=no '$server_path' '$user'@'$environment_ip':/data/$project_name/server.sh
    sshpass  -p '$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$environment_ip'  "sed -i 's#currentappath#$currentpath#g' /data/$project_name/server.sh"
    """
    /**
	* 啓動項目
	**/
    stage 'restart'
    sh """
    sshpass  -p '$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$environment_ip' "cd $project_path && sh server.sh restart"
    """
    echo 'done_______________'
}

變量說明

1.workspace=pwd()  是獲取當前項目所在工作空間一般在jenkins安裝目錄下的workspace目錄下可以找到

2.user 目標服務器的鏈接用戶名

3.passwd 目標服務器的密碼

4.project_name 當前項目名稱

5.jar_name 當前項目打包後jar包名稱

6.server_path 原始啓動腳本(未修改項目路徑的腳本)地址

7.haveDivectory_path 原始在目標服務器創建目標文件夾腳本地址(未修改項目路徑的腳本)

8.currentpath 目標服務器jar包所在全路徑

9.project_path 目標服務器項目所在路徑

10.branches git源碼分支變量(頁面配置多選)

11.environment_ip 目標服務器ip地址(頁面配置多選)

12.activation 配置文件環境變量 (頁面配置多選。需要在maven項目中pom中設置profiles參數變量)

13.git_account 是在jenkins中配置的全局憑證(git倉庫的用戶名密碼)

 

2.jenkins配置變量示例

 

3.原始新建文件夾腳本示例:(使用shell命令修改'targetServerPath'變量)

#!/bin/bash

if [ ! -d 'targetServerPath' ];then
mkdir targetServerPath
else
echo "文件夾已經存在"
fi

4.原始啓動服務腳本示例:(修改shell命令修改'currentappath'變量)

#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.8.0_101/
export JRE_HOME=/$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

#這裏可替換爲你自己的執行程序,其他代碼無需更改

APP_NAME=currentappath
#使用說明,用來提示輸入參數
usage() {
    echo "Usage: sh robotcenter.sh [start|stop|restart|status]"
    exit 1
}

#檢查程序是否在運行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#啓動方法
start(){
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    nohup java -jar ${APP_NAME}  >info.out 2>&1 &
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi  
}

#輸出運行狀態
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重啓
restart(){
  stop
  sleep 5
  start
}

#根據輸入參數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章