想要自动化部署,又不想使用jenkins、docker、k8s这种太重的中间件,编写一个shell脚本是否方便很多呢?每次只需要登上服务器执行一个shell脚本,就能完成整个项目的发布与更新。快来和我一起看看吧

一个SpringBoot项目的完整发布处理流程
::: block-2

以上所有步骤,全部通过shell脚本实现不就可以了吗?
:::

shell脚本命令如下:

#!/bin/bash
# 使用shell脚本,完成SpringBoot的自动化部署。
# 项目名称
PROJECTNAME=testshell-demo
# 打包以后生成的jar包名字
JAR=testshell-demo-0.0.1-SNAPSHOT.jar
# git仓库地址
gitUrl=gitee.com/stevenlisw/testshell-demo.git
# git分支
gitBranch=master
# git用户名
gitUser=testtest
# git密码
gitPass=test
# 输入应用程序端口
port=9898
# 拉取最新代码
echo "正在拉取最新代码..."
gitUrlWithAuth="https://$gitUser:$gitPass@$gitUrl"
if [ ! -d $PROJECTNAME ];then
# 第一次拉取项目,创建项目目录,且使用clone指令
mkdir $PROJECTNAME
git clone $gitUrlWithAuth
fi
# 进入到项目目录
cd $PROJECTNAME
# 切换到对应分支
git checkout -b $gitBranch origin/$gitBranch
git checkout $BRANCH
# 更新代码
git pull
# 使用Maven重新编译
echo "正在使用Maven编译..."
mvn clean compile package -Dmaven.test.skip=true
# 重启应用程序
echo "正在重启应用程序..."
# 关闭正在启动的项目进程,(用于后续发布新版本,重启所用)
ps -ef | grep $JAR | grep -v grep | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
# 判断日志文件目录是否存在
if [ ! -d ../logs ];then
# 创建日志目录
mkdir ../logs
fi
cd ..
nohup java -jar $PROJECTNAME/target/$JAR --server.port=$port 1>logs/server.log 2>&1 &

echo "应用程序已更新并重新启动"


########
# 上面脚本依赖了Git、Maven的命令,所以在运行上述脚本时,系统应提前安装好了git与maven
# 其中lsof是为后续重新项目的时候,查询原有进程的端口将其杀掉,在启动我们的项目。
# Ubuntu安装Git与Maven以及lsof的方式
# sudo apt update
# sudo apt install git
# sudo apt install maven
# CentOS安装Git与Maven的方式
# sudo yum install git
# sudo yum install maven
# 安装完成以后可以使用以下命令进行验证
# git --version
# mvn --version
#
########

以上脚本大致的内容就是先定义git仓库的一些配置,比如git仓库的URL,以及访问仓库的账号与密码。然后第一次去git clone仓库,以及后续源代码有变动时的代码更新git pull,在使用我们的mvn指令对源代码进行打包,最后java -jar进行启动。启动之前我们可能需要先查一下之前该项目有没有在启动,如果有在启动的话,需要先停止在启动,等于重启啦,所以用到了ps -ef | grep xxxxx

细心的同学肯定已经看到啦,上述脚本当中用到了git与maven的指令,那在运行shell脚本之前,肯定也要把git与maven在服务器上安装一下,具体安装的步骤,已经放到脚本最下方的内容啦。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐