springboot项目自动运行脚本
注意文件格式unix格式(Windows cr lf换行符有不可见字符)
#!/bin/sh
# 服务名(要与配置文件中的server名保持一致)
APP_NAME=""
# git本地仓库路径
GIT_RESPOSITORY=""
# 配置文件存储位置
PROFILE_LOCATION=""
# 配置文件名
PROFILE_NAME=""
# 日志文件存储位置
LOG_LOCATION=""
# maven打包文件名(jar包)
PROKAGE_NAME=""
# maven打包的相对路径(git仓库下的相对路径)
MAVEN_PROKAGE_LOCATION=""
clear
echo "+-------------------------------+"
echo "| 自动化部署xx项目后台服务脚本 |"
echo "+-------------------------------+"
#控制台输出日志
_log(){
echo [$(date +"%Y-%m-%d %H:%M:%S")] $@
}
#根据名称结束进程
_kill_program(){
app_name="$1"
tpid=`ps -ef|grep $app_name |grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
_log '停止进程中...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $app_name |grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
_log '停止进程失败,强制结束进程!'
kill -9 $tpid
else
_log '项目已停止!'
fi
}
# 拉取代码并打包
_git_pull_and_maven_package(){
git_res="$1"
cd $git_res
_log 开始从Git仓库拉取最新代码
git pull
_log 代码拉取完成
_log 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
_log 打包结束
}
# 启动项目
_start_project(){
respository4git="$1"
location4maven_prokage="$2"
location4profile="$3"
name4profile="$4"
name4maven_prokage="$5"
name4project="$6"
location4log="$7"
name4app="$8"
location4package=${respository4git}${location4maven_prokage}
# 将本机的application.yml应用到该项目中
cp ${location4profile}/${name4profile} $location4package
mv $location4package/${name4profile} $location4package/application.yml
_log "后台启动项目"
# 将日志追加到指定文件
nohup java -jar $location4package/${name4project} &>> ${location4log} &
sleep 2
tpid=`ps -ef|grep $name4app |grep -v grep|grep -v kill|awk '{print $2}'`
_log "项目启动完成,进程id为:${tpid}"
}
_main(){
_log "停止正在运行的项目"
# 结束原有进程
_kill_program ${APP_NAME}
# 拉取最新代码,并打包
_git_pull_and_maven_package ${GIT_RESPOSITORY}
_start_project ${GIT_RESPOSITORY} ${MAVEN_PROKAGE_LOCATION} ${PROFILE_LOCATION} ${PROFILE_NAME} ${PROFILE_NAME} ${PROKAGE_NAME} ${LOG_LOCATION} ${APP_NAME}
}
_main