失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 利用shell脚本自动更新部署SpringBoot项目

利用shell脚本自动更新部署SpringBoot项目

时间:2020-12-28 17:40:14

相关推荐

利用shell脚本自动更新部署SpringBoot项目

文章目录

背景脚本源码脚本说明脚本使用

背景

因为项目中有多个模块,每个模块需要打包成一个jar运行。每次更新到服务器比较麻烦,所以就想到利用脚本一键实现代码的更新、编译打包、备份、和启动工作。项目中模块除了一个是用gradle编译,其他都是采用maven管理依赖。

脚本源码

deploy.sh

#!/bin/bash#//微服务启动管理脚本//#模块列表,因为maven和gradle构建的差异,为了避免脚本出现过多if else判断,所以两部分分开。#///Maven部分/JarNames=(discover-1.0-SNAPSHOT.jarconsumer-1.0-SNAPSHOT.jar)#--------------------------更新代码----------------------------------echo -e "\e[1;32m 开始更新代码 \e[0m"cd /home/boc/git pullecho -e "\e[1;32m 代码更新完成 \e[0m"#-------------------------循环对所有模块进行编译打包和启动--------------for JarName in ${JarNames[@]}do#查看进程IDPID=$(ps aux | grep ${JarName} | grep -v 'grep' | awk '{print $2}')#要将模块名称分割开,获取到模块名称,同时也是目录名称。先存储旧的分隔符OLD_IFS="$IFS"#设置分隔符IFS="-"#如下会自动分隔arr=(${JarName})# 将IFS恢复成原来的IFS="$OLD_IFS"#------------1.关闭已有进程----------------if [[ ! -z ${PID} ]];thenecho -e "\e[1;32m ${arr[0]} 的进程ID是:$PID \e[0m"echo -e "\e[1;32m 即将关闭${arr[0]} \e[0m"kill -9 ${PID}elseecho -e "\e[1;33m ${arr[0]} 没有启动 \e[0m"fi#------------2.编译代码--------------------echo -e "\e[1;32m 开始编译代码 \e[0m"cd /home/boc/${arr[0]}/mvn clean package -Dmaven.test.skip=trueecho -e "\e[1;32m 编译完成 \e[0m"#------------3.移动备份jar包----------------echo -e "\e[1;32m 开始备份旧jar包,备份位置在:/home/script/serverJAR/bak \e[0m"cd /home/script/serverJARif [[ -e ${JarName} ]];thenmv ${JarName} /home/script/serverJAR/bak/ -frm -rf ${JarName}echo -e "\e[1;32m JAR包备份完成 \e[0m"elseecho -e "\e[1;37m JAR包不存在,直接下一步 \e[0m"fi#------------4.移动新jar包到执行目录----------------cd /home/boc/${arr[0]}/targetif [[ -e ${JarName} ]];thenmv ${JarName} /home/script/serverJAR -fecho -e "\e[1;32m 新JAR准备好 \e[0m"elseecho -e "\e[1;31m JAR包不存在,直接下一步 \e[0m"fi#------------5.开始启动jar包----------------cd /home/script/serverJARecho -e "\e[1;32m 开始启动${arr[0]} \e[0m"nohup java -jar ${JarName} >${arr[0]}_log 2>&1 &echo -e "\e[1;32m 项目启动完成 \e[0m"#tail -f nohup.outdone#///Gradle构建的项目,该类型目前只有一个项目,所以不用循环///weId="weid-1.0-SNAPSHOT.jar"#查看进程IDPID_WeId=$(ps aux | grep ${weId} | grep -v 'grep' | awk '{print $2}')#------------1.关闭已有进程----------------if [[ ! -z ${PID_WeId} ]];thenecho -e "\e[1;32m weId 的进程ID是:${PID_WeId} \e[0m"echo -e "\e[1;32m 即将关闭weId \e[0m"kill -9 ${PID_WeId}elseecho -e "\e[1;33m weId 没有启动 \e[0m"fi#------------2.编译代码--------------------echo -e "\e[1;32m 开始编译gradle项目 \e[0m"cd /home/boc/weidchmod +x ./gradlew && ./gradlew build -x testecho -e "\e[1;32m 编译完成 \e[0m"#------------3.移动备份jar包----------------echo -e "\e[1;32m 开始备份旧jar包,备份位置在:/home/script/serverJAR/bak \e[0m"cd /home/script/serverJARif [[ -e ${weId} ]];thenmv ${weId} /home/script/serverJAR/bak/ -frm -rf ${weId}echo -e "\e[1;32m JAR包备份完成 \e[0m"elseecho -e "\e[1;37m JAR包不存在,直接下一步 \e[0m"fi#------------4.移动新jar包到执行目录----------------cd /home/boc/weid/build/libsif [[ -e ${weId} ]];thenmv ${weId} /home/script/serverJAR -fecho -e "\e[1;32m 新JAR准备好 \e[0m"elseecho -e "\e[1;31m JAR包不存在,直接下一步 \e[0m"fi#------------5.开始启动jar包----------------cd /home/script/serverJARecho -e "\e[1;32m 开始启动weid \e[0m"nohup java -jar ${weId} >weid_log 2>&1 &echo -e "\e[1;32m 项目启动完成 \e[0m"

脚本说明

脚本总体分为maven部分和gradle项目部分,因为maven项目较多,所以采用一个数组定义,并在循环中处理。gradle部分主要不同时编译命令不同,其他相似。为了清晰,把两部分分开写。

总体思路就是:

先判断服务进程运行情况,如果运行,则关闭进程然后进行代码更新和编译备份旧jar包,这一步很必要,如果启动出现问题,可以方便回滚到之前的服务拷贝新jar包后启动服务

shell脚本部分语法说明:

字符串分隔数组

OLD_IFS="$IFS"#设置分隔符IFS="-"#如下会自动分隔arr=(${JarName})# 将IFS恢复成原来的IFS="$OLD_IFS"

IFS是系统默认的分隔符,这里是固定语法,用自己需要的分隔符分隔数组后,恢复系统默认即可。

打印字符颜色

\e[1;37m xxx \e[0m

不同的颜色有不同的序号表示,根据需要查阅即可。

编译jar包命令

maven项目打包并跳过测试代码:

mvn clean package -Dmaven.test.skip=true

gradle项目打包并跳过测试:

chmod +x ./gradlew && ./gradlew build -x test

说明:如果服务器没有装gradle,则用gradlew命令。使用前需要先授权。如果服务器装有gradle。也可以采用下面的命令:

gradle build -x test

脚本使用

执行脚本时,可以进入到脚本所在目录执行下面命令:

sh deploy.sh

为了在不同目录执行,可以将脚本所在目录配置到环境变量,这样就可以在任意目录执行

vim /etc/profile增加PATH路径source /etc/profile

执行效果:

如果觉得《利用shell脚本自动更新部署SpringBoot项目》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。