用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
↓ 頭條的代碼排版格式有點問題,沒縮進,請點擊下面的“了解更多”鏈接查看完整的詳細。有問題請給我留言。