1. 程式人生 > >微服務+Jenkins 簡單的linux自動部署指令碼

微服務+Jenkins 簡單的linux自動部署指令碼

No.1  啟停指令碼

#!/bin/bash
## 載入配置,避免獲取不到java_home 
source /etc/profile

SERVICE_HOME=專案路徑
SERVICE_NAME=服務名稱

cd $SERVICE_HOME/$SERVICE_NAME
PROG=$SERVICE_HOME/$SERVICE_NAME
PIDFILE=$SERVICE_HOME/$SERVICE_NAME/$SERVICE_NAME.pid  
JARFILE=$SERVICE_HOME/$SERVICE_NAME/$SERVICE_NAME.jar

  
status() {  
    if [ -f $PIDFILE ]; then  
        PID=$(cat $PIDFILE)  
        if [ ! -x /proc/${PID} ]; then  
            return 1  
        else  
            return 0  
        fi  
    else  
        return 1  
    fi  
}  
  
case "$1" in  
    start)  
        status  
        RETVAL=$?  
        if [ $RETVAL -eq 0 ]; then  
            echo "-----$PIDFILE exists, process is already running or crashed"  
            exit 1  
        fi  
        
        ##檢測 java環境
        if [ ! -n $JAVA_HOME ]; then
           echo "-----Please check JAVA_HOME!"
           echo "-----Exist"
           exist 1
        else
           echo "-----Jave home: $JAVA_HOME"
           echo "-----Starting $PROG ..." 
           nohup java -server -Xms512m -Xmx512m -jar $JARFILE  > $SERVICE_NAME.log 2>&1 &

           RETVAL=$?
           if [ $RETVAL -eq 0 ]; then
               echo "-----$PROG is started"
               echo $! > $PIDFILE
               exit 0
           else
               echo "-----Stopping $PROG"
               rm -f $PIDFILE
               exit 1
           fi        
        fi
        ;;  
    stop)  
        status  
        RETVAL=$?  
        if [ $RETVAL -eq 0 ]; then  
            echo "-----Shutting down $PROG"  
            kill -9 `cat $PIDFILE`  
            RETVAL=$?  
            if [ $RETVAL -eq 0 ]; then  
                rm -f $PIDFILE  
            else  
                echo "-----Failed to stopping $PROG"  
            fi  
        fi  
        ;;  
    status)  
        status  
        RETVAL=$?  
        if [ $RETVAL -eq 0 ]; then  
            PID=$(cat $PIDFILE)  
            echo "-----$PROG is running ($PID)"  
        else  
            echo "-----$PROG is not running"  
        fi  
        ;;  
    restart)  
        $0 stop  
        $0 start  
        ;;  
    *)  
        echo "Usage: $0 {start|stop|restart|status}"  
        ;;  
esac  
 

 

No.2 配合jenkins 自動部署指令碼

#!/bin/bash

## jenkins 自動部署指令碼   jekins 專案 Post Steps設定 啟動該指令碼,配置如下:
#  BUILD_ID=DONTKILLME
#  bash auto_deploy.sh

SERVICE_NAME=服務名稱
JARPATH=jenkins打包後的jar包地址
echo "service name:$SERVICE_NAME"
SERVICE_HOME=服務跟路徑/$SERVICE_NAME
JARFILE=$SERVICE_HOME/$SERVICE_NAME.jar
BOOTSTRAP_FILE=$SERVICE_HOME/bootstrap.sh

echo "=====service name: $SERVICE_NAME"
echo "=====service home: $SERVICE_HOME"
echo "=====service resouce jar path: $JARPATH"
echo "=====service bootstrap file: $BOOTSTRAP_FILE"
echo "=====service jar: $JARFILE"

##停止原來的服務
echo "-----Stop service"
bash $BOOTSTRAP_FILE stop

echo "-----Delete source jar file path: $JARFILE"
rm -rf JARFILE

echo "-----Copy $JARPATH to $SERVICE_HOME"
cp $JARPATH $SERVICE_HOME 
COPYRULST=$?
if [ $COPYRULST -eq 0 ]; 
then
    echo "-----Copy success,wait start service....."
    bash $BOOTSTRAP_FILE start
    RETVAL=$?
    if [ $RETVAL -eq 0 ];
    then
       echo "-----$SERVICE_NAME started!"
    else
       echo "-----$SERVICE_NAME start failed!"
    fi
else
    echo "-----Not exist $SERVICE_NAME jar"
    exit 1
fi


 

No.3 jenins自動遠端部署指令碼

#!/bin/bash

## jenkins 自動部遠端署指令碼,需要配置兩個伺服器之間免密登入
## 免登陸配置參考:https://blog.csdn.net/u011186019/article/details/51737760?utm_source=blogxgwz4
##jekins 專案 Post Steps設定 啟動該指令碼,配置如下:
#BUILD_ID=DONTKILLME   -- 表示Jenkins執行完後不殺死該程序,否則會再jenkins執行完後殺死啟動的程序
#bash 遠端指令碼

SERVICE_NAME=服務名稱
REMOTE_SERVICES_HOME=伺服器HOME
REMOTE_SERVICE_IP=遠端伺服器IP
REMOTE_SERVICE_HOME=$REMOTE_SERVICES_HOME/$SERVICE_NAME
REMOTE_SERVICE_JAR=$REMOTE_SERVICE_HOME/$SERVICE_NAME.jar
REMOTE_SERVICE_BOOTSTRAP=$REMOTE_SERVICE_HOME/bootstrap.sh

LOCAL_JAR_PATH=jenkins打包後的路徑


echo "=============Service name: $SERVICE_NAME"
echo "=============Remote services home: $REMOTE_SERVICES_HOME"
echo "=============Remote server ip: $REMOTE_SERVICE_IP"
echo "=============Remote service home: $REMOTE_SERVICE_HOME"
echo "=============Remote service jar: $REMOTE_SERVICE_JAR"
echo "=============Remote service bootstrap file: $REMOTE_SERVICE_BOOTSTRAP"

echo "-----Stop and Delete remote service: $SERVICE_NAME"
ssh -T [email protected]$REMOTE_SERVICE_IP << remotessh
sh $REMOTE_SERVICE_BOOTSTRAP stop
rm -rf $REMOTE_SERVICE_JAR
exit
remotessh

echo "-----Scp $LOCAL_JAR_PATH to $REMOTE_SERVICE_HOME"
scp $LOCAL_JAR_PATH [email protected]$REMOTE_SERVICE_IP:$REMOTE_SERVICE_HOME 

echo "-----Start remote service"
ssh -T [email protected]$REMOTE_SERVICE_IP << remotessh
sh $REMOTE_SERVICE_BOOTSTRAP start
exit
remotessh
 

 

Git傳送門:https://github.com/Xlinlin/spring-cloud-demo/tree/master/SpringCloud-Common/script