用 shell 脚本实现在 Linux 服务器上自动拉取 Spring boot 的 git 源码,杀掉原有的进程,自动打包成 jar,备份原有的 jar,然后启动项目。
对于不太大的 Spring boot 项目,或者服务器性能有限,可以不用 Jenkins 这类工具,用个 shell 脚本就可以基本实现自动打包、停掉原来的进程、备份旧的 jar,然后自动启动 jar
首先需要在 Linux 服务器上安装 JDK、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://yourname@shangshiwendao.com:password@gitee.com/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 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
正文完