前言
日常开发中,经常会打包发布项目到服务器,每次都重新写一次会非常浪费时间,故写了一个通用的打包发布及启动脚本。
操作环境
- Centos 7
- git
- java 8
- maven3
打包发布脚本
publish.sh
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67#!/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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43#!/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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#!/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通用发布启动脚本的全部内容,更多相关[经验]内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复