用shell腳本實現在Linux服務器上自動拉取Spring boot的git源碼,殺掉原有的進程,自動打包成jar,備份原有的jar,然後啓動項目。
對于不太大的Spring boot項目,或者服務器性能有限,可以不用Jenkins這類工具,用個shell腳本就可以基本實現自動打包、停掉原來的進程、備份舊的jar,然後自動啓動jar
首先需要在Linux服務器上安裝Maven和Git客戶端,這是前提條件。
下面是shell代碼,你可以根據實際情況按注釋的提示修改
#!/usr/bin/env bash
# 項目名稱
CODE_DIR="project"
# 打包後的jar名稱前綴
PACKAGED_NAME_ADMIN="app-1.0.0"
# jar存放位置
APP_DEPLOY_PATH="/www/java"
# JAVA_HOME="/usr/java/jdk1.8.0_161"
# spring boot用哪個環境運行
PROFILE="produce"
# PORT=39005
#如果任何語句的執行結果不是true則應該退出
set -e
#git初始化配置,配置後,無需手動輸入用戶名及密碼即可從指定git管理代碼
function gitinit(){
echo "start gitinit..."
cd ~/
touch .git-credentials
# 這裏的git地址和賬號請修改
echo "https://[email protected]:[email protected]/fuwu360/project.git" > .git-credentials
git config --global credential.helper store
#執行此句後~/.gitconfig文件多了一項[credential] helper = store
echo "finish gitinit..."
}
function clone(){
echo "start pull git resource code..."
rm -rf ./$CODE_DIR
# 請自行修改這裏的git地址爲你的項目地址
git clone https://gitee.com/fuwu360/project.git
cd ./$CODE_DIR
echo "git checkout succeed ..."
}
#pull and package gitcodeResource
function package(){
echo "start package..."
cd ./$CODE_DIR
git pull
mvn clean package -Dmaven.test.skip=true
echo "packaging app success ..."
}
#code deploy
function deploy(){
cd $APP_DEPLOY_PATH
# 如果備份目錄back不存在則創建
if [ ! -d backup ];then
mkdir backup
else
echo "dir backup exist"
fi
echo "重命名舊版本並備份..."
if [ -f $PACKAGED_NAME_ADMIN.jar ]
then
mv $PACKAGED_NAME_ADMIN.jar ./backup/$PACKAGED_NAME_ADMIN'_'`date +%Y%m%d%H%M%S`.jar
fi
echo "複制新的jar..."
cp $APP_DEPLOY_PATH/$CODE_DIR/target/$PACKAGED_NAME_ADMIN.jar $APP_DEPLOY_PATH
}
# 停止進程
function shutdown(){
PID=$(ps -ef | grep $PACKAGED_NAME_ADMIN.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo jar is already stopped
else
echo kill $PID
kill -9 $PID
fi
}
# app startup
function startup(){
echo "startuping"
shutdown
package
deploy
# export JAVA_HOME=$JAVA_HOME
# app_log.txt是日志名字,請自行修改
nohup java -jar $PACKAGED_NAME_ADMIN.jar --spring.profiles.active=$PROFILE >app_log.txt 2>&1 &
echo "startuping success ..."
# echo "打開端口:"$PORT"..."
# firewall-cmd --zone=public --add-port=$PORT/tcp --permanent
}
#pring helpinfo
function help(){
echo "Usage: ./run_app.sh [gitinit|clone|package|deploy|startup|shutdown|help]"
echo "gitinit:初始化git設置"
echo "package:程序打包"
echo "deploy:程序發布"
echo "startup:程序啓動"
echo "shutdown:程序關閉"
echo "help:打印幫助信息"
}
case "$1" in
'gitinit')
gitinit
;;
'clone')
clone
;;
'package')
package
;;
'deploy')
deploy
;;
'startup')
startup
;;
'shutdown')
shutdown
;;
'help')
help
;;
*)
esac
exit 0
↓ 頭條的代碼排版格式有點問題,沒縮進,請點擊下面的“了解更多”鏈接查看完整的詳細。有問題請給我留言。