Shell脚本+git自动部署Java项目

编写Shell脚本

我们可以在自己的服务器中,指定的目录里面,创建 xxx.sh 脚本文件。

创建.sh 文件,文件名不用和我一样,根据你们的需求创建脚本名字就好了。

复制代码
touch carRental.sh

补充shell脚本

复制代码
#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

# 定义基础路径变量
BASE_PATH="/usr/local/app_local/apps"

echo 停止原来运行中的工程

# 这个名字根据自己需要起的名字
APP_NAME=car-cental-server

# 通过 ps 命令查找正在运行的项目进程 ID
tpid=$(ps -ef | grep "$APP_NAME" | grep -v grep | grep -v kill | awk '{print $2}')
# 判断进程 ID 是否存在
if [ -n "$tpid" ]; then
    echo '正在停止进程...'
    # 尝试使用 SIGTERM 信号(15)优雅地停止进程
    kill -15 "$tpid"
fi

# 等待 2 秒,让进程有时间停止
sleep 2

# 再次检查进程是否还在运行
tpid=$(ps -ef | grep "$APP_NAME" | grep -v grep | grep -v kill | awk '{print $2}')
if [ -n "$tpid" ]; then
    echo '强制终止进程!'
    # 使用 SIGKILL 信号(9)强制终止进程
    kill -9 "$tpid"
else
    echo '进程停止成功!'
fi

echo 准备从 Git 仓库拉取最新代码  # 这个路径是你自己项目的路径(前提:你的项目已经上传到 git 中)
# 切换到项目所在目录
cd "$BASE_PATH/car_rental"
# 检查目录切换是否成功
if [ $? -ne 0 ]; then
    echo "进入项目目录失败,脚本终止"
    # 若失败,退出脚本并返回状态码 1
    exit 1
fi

echo 开始从 Git 仓库拉取最新代码
# 从 Git 仓库拉取最新代码
git pull
# 检查拉取操作是否成功
if [ $? -ne 0 ]; then
    echo "代码拉取失败,脚本终止"
    exit 1
fi
echo 代码拉取完成

echo 开始打包
# 使用 Maven 进行项目打包,跳过测试
mvn clean package -Dmaven.test.skip=true
# 检查打包操作是否成功
if [ $? -ne 0 ]; then
    echo "打包失败,脚本终止"
    exit 1
fi

# 修正为正确的 target 目录路径
cd "$BASE_PATH/car_rental/target"
# 检查是否成功进入 target 目录
if [ $? -ne 0 ]; then
    echo "进入 target 目录失败,脚本终止"
    exit 1
fi

echo 启动项目
# 使用 nohup 命令在后台启动项目,并将日志输出到指定文件
nohup java -jar car_rental_separate-0.0.1-SNAPSHOT.jar &> "$BASE_PATH/car_rental.log" &
# 检查项目启动是否成功
if [ $? -ne 0 ]; then
    echo "项目启动失败,脚本终止"
    exit 1
fi
echo 项目启动完成    

编码格式要弄对

进入的target目录

jar包名称

脚本解读

修改脚本文件权限

复制代码
#直接输入脚本名称回车
carRental.sh

为啥脚本写好了,跑不了,因为我们没有权限执行。

授权

复制代码
chmod 777 carRental.sh 

可以看到授权之后,脚本颜色变成绿色了,代表可以执行了。

测试启动下

复制代码
./carRental.sh
相关推荐
Elastic 中国社区官方博客几秒前
使用 Observability Migration Platform 将 Datadog 和 Grafana 的仪表板与告警迁移到 Kibana
大数据·elasticsearch·搜索引擎·信息可视化·全文检索·grafana·datalog
小袁拒绝摆烂13 分钟前
多表关联大平层转JSON树形结构
java·json
ja哇1 小时前
大厂面试高频八股
java·面试·职场和发展
yoyo_zzm1 小时前
Laravel6.x新特性全解析
java·spring boot·后端
Nick_zcy2 小时前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi
源码宝2 小时前
基于 SpringBoot + Vue 的医院随访系统:技术架构与功能实现
java·vue.js·spring boot·架构·源码·随访系统·随访管理
qinqinzhang2 小时前
Java 中的 IoC、AOP、MVC
java
禾叙_2 小时前
【langchain4j】结构化输出(六)
java·开发语言
饭小猿人2 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
Advancer-3 小时前
第二次蓝桥杯总结(上)
java·算法·职场和发展·蓝桥杯