概述
前言
日常开发中,经常会打包发布项目到服务器,每次都重新写一次会非常浪费时间,故写了一个通用的打包发布及启动脚本。
操作环境
- Centos 7
- git
- java 8
- maven3
打包发布脚本
publish.sh
#!/bin/bash
# 当前时间
date=`date "+%Y%m%d%H%M%S"`
# 项目地址
git_addr="http://git/repository/java/project.git"
# 项目根目录
master_dir="project"
slave_dir=""
# 项目名称
shellFullName=$(basename $0)
git_project=$(echo $shellFullName | cut -d . -f1)
# 项目分支
git_branch="dev"
#目标服务器IP
target_ip="打包后传输的目的地"
# 项目源码路径
package_path="/data/git"
# 替换jar包路径
target_jar_File="${package_path}/movie-cloud/${slave_dir}/${git_project}/target/${git_project}.jar"
# 备份jar包路径
backup_jar_File="${target_jar_File}_${date}"
# shell文件名称
shell_name="$0"
# 打包后推送到指定服务器,用户及路径为项目启动所在服务的相关配置
publish(){
echo "开始远程拷贝-----------------------------------------------------------"
scp ${target_jar_File} root@${target_ip}:/root/java/${master_dir}/${git_project}
echo "开始远程启动-----------------------------------------------------------"
ssh root@${target_ip} "source /etc/profile && sh /root/java/${master_dir}/${git_project}/stop.sh && echo ${?} && sleep 8;"
ssh root@${target_ip} "source /etc/profile && sh /root/java/${master_dir}/${git_project}/start.sh && echo ${?};"
echo "远程启动中"
}
echo "发布时间:" ${date}
echo "git地址:" ${git_addr}
echo "项目名称" ${git_project}
echo "git分支:" ${git_branch}
echo "target_jar_File:" ${target_jar_File}
echo "backup_jar_File:" ${backup_jar_File}
while true
do
read -r -p "是否重新打包项目? [Y/n] " input
case $input in
[yY][eE][sS]|[yY])
echo "开始拉取git--------------------------------------------------------"
cd ${package_path} && rm -rf ${master_dir}
git clone ${git_addr}
cd ${package_path}/${master_dir}
echo "开始打包------a-----------------------------------------------------"
git checkout ${git_branch}
mvn clean install -Dmaven.test.skip=true
publish
exit 1
;;
[nN][oO]|[nN])
echo "略过打包直接发布"
publish
exit 1
;;
*)
echo "错误的执行命令请输入[Y/n]..."
;;
esac
done
启动脚本
start.sh
#!/bin/sh
PRG="$0"
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> (.*)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
[ -z "$APP_HOME" ] && APP_HOME=`cd "$PRGDIR" >/dev/null; pwd`
[ -z "$APP_PID" ] && APP_PID=$APP_HOME/pid
FILE_LIST=`ls ${APP_HOME}`
JAR_FILE=""
LOG_FILE=""
for FILE in $FILE_LIST
do
if [ "${FILE##*.}" = "jar" ]; then
JAR_FILE="${APP_HOME}/${FILE}"
LOG_FILE="${FILE%.*}.log"
fi
done
if [ -z $JAR_FILE ]; then
echo "Error : no jar file in $APP_HOME"
exit
fi
if [ -f "$APP_PID" ]; then
PID=`cat $APP_PID`
rm -rf $APP_PID
kill -9 $PID
fi
nohup java $DEBUG -jar -Dspring.profiles.active=dev -Xmx2024m -Dfile.encoding=UTF-8 ${JAR_FILE} >>$APP_HOME/${LOG_FILE} 2>&1 &
PID=$!
echo $PID > ${APP_PID}
if [ ! -f $APP_HOME/${LOG_FILE} ]; then
echo "begin....." >>$APP_HOME/${LOG_FILE}
fi
停止脚本
stop.sh
#!/bin/sh
PRG="$0"
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> (.*)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
[ -z "$APP_HOME" ] && APP_HOME=`cd "$PRGDIR" >/dev/null; pwd`
[ -z "$APP_PID" ] && APP_PID=$APP_HOME/pid
if [ ! -f "$APP_PID" ]; then
echo 'no pid file found.'
else
PID=`cat $APP_PID`
echo "kill process $PID"
rm -rf $APP_PID
kill -9 $PID
#kill $PID
fi
总结
以上及项目中会经常使用的项目打包及发布脚本,发布脚本需对项目环境做些微调,启动及停止脚本拷贝到启动目录即可直接使用,无需调整,如果大家有更好的方案及方法欢迎指导,谢谢。
最后
以上就是健康大炮为你收集整理的[经验] springboot通用发布启动脚本的全部内容,希望文章能够帮你解决[经验] springboot通用发布启动脚本所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复