Java 中 Linux部署 怎么编写轻量级一键部署 Shell 脚本实现拉取 Git 源码、打包并重启全链路

舞夢輝影

舞夢輝影

2026-07-24

941人浏览

原创

基础环境配置脚本需声明解释器、设路径与参数,用env区分环境,显式定义app_name和repo_url;java依赖jdk 8+与maven/gradle,须验证java -version与mvn -v;拉码前判目录存在性,存在则git pull --rebase,否则git clone;部署前清理target/或build/;用set -e确保失败即停;编译用mvn clean package -dmaven.test.skip=true;校验jar存在且可执行;复制jar至/opt/app/$app_name/并重命名;保留旧版jar用于回滚;用systemd管理服务,含user、workingdirectory、execstart及restart=always;重启前检查端口占用,启动后轮询健康接口30秒,失败则回滚;日志定向至/var/log/$app_name/app.log;确保部署用户对代码、jar、日志目录有权限,git配好凭据,systemd中显式指定java_home。

java 中 linux部署 怎么编写轻量级一键部署 shell 脚本实现拉取 git 源码、打包并重启全链路

准备基础环境与变量配置

脚本开头需声明解释器、设置基础路径和参数,避免硬编码。建议用 ENV 变量控制不同环境(如 test/prod),用 APP_NAMEREPO_URL 显式定义应用名与 Git 地址。Java 环境依赖 JDK 8+ 和 Maven(或 Gradle),提前在目标机器安装并验证 java -versionmvn -v 可执行。

拉取源码并清理旧构建

使用 git clonegit pull 更新代码。推荐先判断项目目录是否存在:存在则进入并 git pull --rebase;不存在则 git clone。每次部署前应清理上一次的 target/(Maven)或 build/(Gradle)目录,防止残留 class 或 jar 影响打包一致性。可加 set -e 让任意命令失败时脚本立即退出。

  • cd "$PROJECT_DIR" && git reset --hard && git pull 强制同步最新提交
  • rm -rf target/ && mkdir -p target/ 清理构建产物
  • 若需指定分支,追加 -b main --single-branch

编译打包并校验产物

执行 mvn clean package -Dmaven.test.skip=true(跳过测试)生成 jar。关键点是确认最终 jar 文件存在且可执行:test -f "target/*.jar" 并用 unzip -tjava -Djava.awt.headless=true -jar xxx.jar --help &>/dev/null 粗略校验。若为 Spring Boot 项目,确保 spring-boot-maven-plugin 已启用,生成 fat-jar。

Java JDK 25
Java JDK 25

Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。

下载
  • find target/ -name "*.jar" -type f | head -n1 获取最新 jar 路径
  • 将 jar 复制到统一发布目录(如 /opt/app/$APP_NAME/),重命名为 $APP_NAME.jar
  • 保留上一版本 jar 用于快速回滚(如 cp $OLD_JAR $BACKUP_DIR/$(date +%s).jar

平滑重启服务

用 systemd 管理 Java 进程最稳妥。提前编写 /etc/systemd/system/$APP_NAME.service,包含 UserWorkingDirectoryExecStart(带 JVM 参数)、Restart=always。脚本中只需执行 systemctl daemon-reload && systemctl restart $APP_NAME。若暂未用 systemd,可用 pid 文件 + kill + nohup 启动,但务必加等待逻辑(如 sleep 3 && curl -sf http://localhost:8080/actuator/health)确认服务就绪。

  • 重启前检查端口占用:lsof -i :8080 | grep LISTEN,有则 kill -15 停旧进程
  • 启动后轮询健康接口最多 30 秒,失败则自动回滚 jar 并报错退出
  • 日志重定向到 /var/log/$APP_NAME/app.log,便于排查

不复杂但容易忽略的是权限与上下文:脚本应以部署用户运行(非 root),确保该用户对代码目录、jar 目录、日志目录有读写权限;Git 配置好 SSH key 或 HTTPS 凭据;systemd service 文件里 Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" 显式指定 JDK 路径。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3720

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2753

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2777

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

635

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

600

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

705

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1288

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18844

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

646

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

Java 26官方文档
Java 26官方文档

共0课时 | 0人学习