shell 脚本快速部署 SpringBoot 项目

avatar 2020年07月24日15:05:52 0 1450 views

        部署项目是开发人员日常工作的一部分,减少开发人员部署项目的难度和复杂度十分重要。一般稍微大一点的公司都有自己的 devops 方案,会使用一些 CI/CD 工具来部署项目,很多公司使用 Jenkins 来部署项目,或者开发自己的流水线部署工具。

        但是,对于我们个人开发而言,平时周末写一些项目,架构也不复杂,其实不太需要使用那些庞大的工具(相当吃内存)。

        就以本站而言,本站目前处于持续开发中,一旦发现Bug或者自己加新功能后,希望马上快速方便的部署。

        所以,这时候,我们可以写一个简单的 shell 来脚本来帮我们做这些事情。

        主要内容包括:git pull 代码、mvn 打包项目、杀死原先进程、运行 jar 项目

 

以本站项目为例

如图分别在项目根目录新建 bin/sens.sh 和 deploy.sh

准备

1、将代码上传到 GitHub,目前使用的是私有仓库

2、登录 Linux 服务器,安装 git 和 maven 并配置环境变量

3、git clone 项目

4、尝试 git pull,设置保存密码(即确保 pull 的时候不需要提示输入密码)

 

脚本代码如下

1、sens.sh 代码如下

#!/bin/bash
APP_NAME=sens-bootstrap-1.0-SNAPSHOT.jar

usage() {
    echo "用法: sh sens.sh [start(启动)|stop(停止)|restart(重启)|status(状态)]"
    exit 1
}

is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} 正在运行。 pid=${pid} ."
  else
    nohup java -server -Xms2048m -Xmx2048m -Xmn680m -Xloggc:/www/wwwroot/sens-parent-back/gc.log -jar $APP_NAME  > /dev/null 2>&1 &

    echo "${APP_NAME}启动 成功,请查看日志确保运行正常。"
    fi
}

stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
    echo "${pid} 进程已被杀死,程序停止运行"
  else
    echo "${APP_NAME} 没有运行。"
  fi
}

status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} 正在运行。Pid is ${pid}"
  else
    echo "${APP_NAME} 没有运行。"
  fi
}

restart(){
  stop
  start
}

case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

注意:APP_NAME 是项目打包后的 jar 名称,注意修改 start() 里的 java 运行参数

 

 

2、deploy.sh 代码如下

#!/bin/bash

# 指定SENS的根目录,请按实际修改
SENS_DIR="/www/wwwroot/sens-parent-back"

# 拉取最新的源码
git pull
#echo "代码拉取完毕!"

# 进入SENS根目录
cd $SENS_DIR

# 停止SENS
sh $SENS_DIR/bin/sens.sh stop

# 设置环境变量,执行打包
mvn clean package -Dmaven.test.skip=true
echo "代码打包完毕!"

# 进入打包好的SENS目录
cd $SENS_DIR/sens-bootstrap/target

# 运行SENS
sh $SENS_DIR/bin/sens.sh start

echo "部署完毕,Enjoy!"

 

注意:SENS_DIR 是Linux服务器上项目的地址

 

然后每次修改代码后,只需要本地 commit 并 push 代码

然后在 Linux 上项目所在目录执行 sh deploy.sh 即可,一定程度上让自己偷点懒!

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
可以匿名评论或者登录后台评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0