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
相关推荐
Boilermaker19922 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维2 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子2 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34163 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体13 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18093 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18094 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假4 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
资生算法程序员_畅想家_剑魔5 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin