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
相关推荐
大囚长2 分钟前
大模型服务端如何命中缓存
java·人工智能·缓存·dubbo
摇滚侠2 分钟前
SpringMVC 入门到实战 拦截器 78-82
java·后端·spring·maven·intellij-idea
磊 子8 分钟前
C++移动语义和智能指针
java·开发语言·c++
JAVA面经实录9179 分钟前
Elasticsearch 完整版完整知识体系
java·elasticsearch·搜索引擎·es
hikktn12 分钟前
ORA-01861 日期格式错误的根治方案:从 SQL 层到 Java 层的标准化治理
java·python·sql
雪宫街道17 分钟前
SpringBoot 静态资源映射规则与定制
java·spring boot·后端·spring
ANNENBERG26 分钟前
git分支开发管理
git
宸津-代码粉碎机27 分钟前
Spring AI企业级实战|智能记忆摘要+自动遗忘机制落地,彻底解决上下文爆炸与Token冗余
java·大数据·人工智能·后端·python·spring
南极企鹅28 分钟前
springboot项目不退出的原因
java·spring boot·后端
devilnumber32 分钟前
Java 二分查找(二分算法)详解 + 实战运用 + 核心坑点
java·开发语言·算法