使用脚本快速部署Java项目

自己经常写一些小项目,有时候是自己写,更多时候是帮别人写。

一般都要部署到服务器上,最早使用的方法是本地 mvn clean package 打包好,上传到服务器上运行。有时候发现自己写了个bug,修复了,或者改了点/加了点需求,改完代码,又要重新打包,上传。

反反复复,很麻烦。之前在公司,用的是 jenkins,解决了这个痛点,jenkins 搭好了后,只需要在 jenkins 后台点击构建即可。后来,也用了一段时间公司自己开发的一个云产品,类似 EDAS 的一个东西,只需要把代码推到 GitLab上,  构建项目,运行项目全在后台操作,安全可靠。

但是这些东西,都是针对大型项目,项目复杂度高,服务器配置也高。自己一个人开发的小项目,通常都是单模块项目,客户的服务器配置可能也不高,2G内存,1G内存都有可能。

于是,直接用 shell 脚本启动项目不失为一种好方法。

 

具体实现

代码结构如下

使用脚本快速部署Java项目

 

主要思路就是,通过 shell 脚本执行以下几个操作

 

  1. git pull 拉取 git 仓库最新代码
  2. 停止之前运行的项目
  3. mvn clean package -Dmaven.test.skip=true 打包项目
  4. cd target  进入 target 目录
  5. nohup java -jar sens-latest.jar & 后台运行 jar 包

 

 

sens.sh

  1. #!/bin/bash
  2. APP_NAME=sens-latest.jar
  3. usage() {
  4.     echo "用法: sh sens.sh [start(启动)|stop(停止)|restart(重启)|status(状态)]"
  5.     exit 1
  6. }
  7. is_exist(){
  8.   pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  9.   if [ -z "${pid}" ]; then
  10.    return 1
  11.   else
  12.     return 0
  13.   fi
  14. }
  15. start(){
  16.   is_exist
  17.   if [ $? -eq "0" ]; then
  18.     echo "${APP_NAME} 正在运行。 pid=${pid} ."
  19.   else
  20.     nohup java -server -Xms256m -Xmx512m -jar $APP_NAME > /dev/null 2>&1 &
  21.     echo "${APP_NAME}启动成功,请查看日志确保运行正常。"
  22.     fi
  23. }
  24. stop(){
  25.   is_exist
  26.   if [ $? -eq "0" ]; then
  27.     kill -9 $pid
  28.     echo "${pid} 进程已被杀死,程序停止运行"
  29.   else
  30.     echo "${APP_NAME} 没有运行。"
  31.   fi
  32. }
  33. status(){
  34.   is_exist
  35.   if [ $? -eq "0" ]; then
  36.     echo "${APP_NAME} 正在运行。Pid is ${pid}"
  37.   else
  38.     echo "${APP_NAME} 没有运行。"
  39.   fi
  40. }
  41. restart(){
  42.   stop
  43.   start
  44. }
  45. case "$1" in
  46.   "start")
  47.     start
  48.     ;;
  49.   "stop")
  50.     stop
  51.     ;;
  52.   "status")
  53.     status
  54.     ;;
  55.   "restart")
  56.     restart
  57.     ;;
  58.   *)
  59.     usage
  60.     ;;
  61. esac

 

deploy.sh

  1. #!/bin/bash
  2. # 指定SENS的根目录,请按实际修改
  3. SENS_DIR="/www/wwwroot/SENS"
  4. # 拉取最新的源码
  5. # git pull
  6. echo "代码拉取完毕!"
  7. # 进入SENS根目录
  8. cd $SENS_DIR
  9. # 停止SENS
  10. sh $SENS_DIR/bin/sens.sh stop
  11. # 执行打包
  12. mvn clean package -Pprod -Dmaven.test.skip=true
  13. echo "代码拉取完毕!"
  14. # 进入打包好的SENS目录
  15. cd $SENS_DIR/target/dist/sens
  16. # 运行SENS
  17. nohup java -server -Xms256m -Xmx512m -jar `find ./ -name "sens*.jar"` > /dev/null 2>&1 &
  18. echo "SENS部署完毕,Enjoy!"

 

启动项目:sh deploy.sh

停止项目:sh sens.sh stop

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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: