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
posted @ 2023-09-07 12:22  under_cure  阅读(49)  评论(0编辑  收藏  举报