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
相关推荐
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
zzqssliu3 小时前
煤炉自动代拍系统的队列设计与超时控制机制
git·github
一支绝命钩3 小时前
FPGA工程Git常用操作手册
git
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨5 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
不搞学术柒柒7 小时前
Git新功能完整开发提交流程
git
维天说8 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
阿里云大数据AI技术8 小时前
阿里云 ES AI 引擎版:面向 Agent 场景,为亿级租户、千亿规模向量设计的搜索引擎
人工智能·elasticsearch·agent
阿里云大数据AI技术9 小时前
FalconSeek 技术解析:阿里云 Elasticsearch 云原生内核如何让查询性能飙升600%
人工智能·elasticsearch