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
相关推荐
武子康1 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
即使再小的船也能远航2 小时前
【Git】实用Git操作指南:从入门到高效协作
git
Hello.Reader3 小时前
Go-Elasticsearch v9 安装与版本兼容性
elasticsearch·golang·jenkins
YuTaoShao3 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw4 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨4 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
双力臂4045 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
Edingbrugh.南空5 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
QQ_4376643146 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++
永卿0016 小时前
设计模式-迭代器模式
java·设计模式·迭代器模式