springboot项目自动运行脚本

发布时间 2023-09-07 12:30:26作者: under_cure

注意文件格式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 打包结束
}

_main(){
	_log "检查项目是否正在运行..."
	# 结束原有进程
	_kill_program ${APP_NAME}
	# 拉取最新代码,并打包
	/0_user/sh/common/git_pull_and_maven_package.sh ${GIT_RESPOSITORY}
	# 进入打包后的文件位置
	package=${GIT_RESPOSITORY}${MAVEN_PROKAGE_LOCATION}
	# 将本机的application.yml应用到该项目中
	cp ${PROFILE_LOCATION}/${PROFILE_NAME} $package
	mv $package/${PROFILE_NAME} $package/application.yml
	_log "后台启动项目"
	# 将日志追加到指定文件
	nohup java -jar $package/${PROKAGE_NAME} &>> ${LOG_LOCATION} &
	sleep 2
	tpid=`ps -ef|grep $APP_NAME |grep -v grep|grep -v kill|awk '{print $2}'`
	_log "项目启动完成,进程id为:${tpid}"
}

_main