我們經常使用Jenkins腳本來自動部署我們的Java工程打成的jar包,下面介紹一種簡單的自動部署腳本,可使用於多模塊工程。
第一種是調用遠程腳本啓動
具體的腳本如下:
#!/bin/bash
#java env
#shell腳本有時候調用linux的環境變量會有問題,所以這裏還是把用到的java環境再設置一下
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
#app name 爲了確保腳本通用
APP_NAME=$2
SERVICE_DIR=/Users/accName/java/$APP_NAME
SERVICE_NAME=$3
APP_JAR=$SERVICE_DIR/$SERVICE_NAME/build/libs/$SERVICE_NAME\-0.0.1-SNAPSHOT.jar
#啓動app的時候,將進程的pid保存在這裏,方便以後殺死進程用
APP_PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
echo "jar path: $APP_JAR"
case "$1" in
start)
#/dev/null 就不會有nohup.out文件了。
nohup $JAVA_HOME/bin/java -Xms32m -Xmx128m -jar $APP_JAR >/dev/null 2>&1 &
#將pid寫入文件
echo $! > $SERVICE_DIR/$APP_PID
echo "===== start $SERVICE_NAME"
;;
stop)
kill `cat $APP_PID`
#刪除掉pid文件
rm -f $SERVICE_DIR/$APP_PID
#查看是不是殺死進程了
sleep 5
#獲得進程號,複製號兩邊不能留空格
pid=`ps -ef | grep -w $SERVICE_NAME | grep -v grep | awk '{print $2}'`
#判斷相等兩邊要留空格
if ["$pid" == ""];then
echo "=== kill successfully "
else
echo "===== kill fail and try to kill -9"
echo "==== the pid is $pid"
kill -9 $pid
fi
echo "stop finished"
;;
*)
echo "please use start or stop 參數"
;;
esac
exit 0
此腳本適合多模塊構建的程序,輸入不同的參數,就可以實現不同服務的Jar包部署
如:
./appServer.sh -a websocket -s socket-web -o start
就可以啓動websocket項目中的socket-web服務
-a:appName應用名稱
-s:serviceName服務名稱
-o:operation操作狀態
如果jdk是默認的,就單獨部署一個模塊下的jar包,直接使用下面啓動即可:
nohup java -jar application.jar >out.txt &
第二種Jenkins本地加載腳本啓動
第二種方法,就是直接在Jenkins中編寫啓動腳本
下面是一個簡單的啓動部署腳本
#!/bin/bash
echo "start load application......."
cd /home/feify/.jenkins/workspace/web-docker/build/libs
SERVICE_NAME=avatar-web-docker-1.0.jar
kill `cat $APP_PID`
#刪除掉pid文件
rm -f app.pid
#查看是不是殺死進程了
sleep 5
#獲得進程號,複製號兩邊不能留空格
pid=`ps -ef | grep -w $SERVICE_NAME | grep -v grep | awk '{print $2}'`
#判斷相等兩邊要留空格
if ["$pid" == ""];then
echo "=== kill successfully "
else
echo "===== kill fail and try to kill -9"
echo "==== the pid is $pid"
kill -9 $pid
fi
echo "stop old process finished"
echo "stat new APP version"
nohup java -Xms32m -Xmx128m -jar $SERVICE_NAME >/dev/null 2>&1 &
echo $! > app.pid
echo " start successful"
實際使用中,可以使用環境變量列表中的值來替換這些具體的應用名稱,工作空間等等。