当前位置: 首页 > news >正文

云效部署实现Java项目自动化部署图解

前言

 记录下使用云效部署Java项目,实现java项目一键化自动化部署。

云效流程说明:

1.云效拉取最新git代码后

2.进行maven编译打包后,上传到指定服务器目录

3.通过shell脚本,先kill java项目后,通过java -jar 启动项目。

操作步骤

 

 

 

注:git代码更新需要手动更新 

 

 

 

 添加服务连接-获得阿里云授权

部署脚本配置: 

# 创建必要的目录
mkdir -p /usr/local/nginx/app
mkdir -p /usr/local/nginx/app/mall-im_turn_java
mkdir -p /usr/local/nginx/app/mall-im_turn_java/jar

mkdir -p /usr/local/nginx/app/mall-im_turn_java/jar/logs
# 解压文件
tar zxvf /usr/local/nginx/app/mall-im_turn_java/mall_release.tgz -C /usr/local/nginx/app/mall-im_turn_java/jar
# 执行sh脚本
cd  /usr/local/nginx/app/mall-im_turn_java/jar
bash /usr/local/nginx/app/mall-im_turn_java/jar/start_run.sh 

#进入此目录

cd   /usr/local/nginx/app/mall-im_turn_java/jar 

#编辑java启动脚本 不同jar包名称-按这个替换即可 mall-im-1.0-SNAPSHOT.jar

vi start_run.sh

#!/bin/bash
#export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
#export PATH=$JAVA_HOME/bin:$PATH# 应用名称
AppName="mall-im-1.0-SNAPSHOT.jar"# 应用主目录和日志路径
APP_HOME=$(pwd)
LOG_PATH="$APP_HOME/logs/$AppName.log"
APP_JAR_PATH="$APP_HOME/$AppName"
GC_LOG_PATH="$LOG_PATH/gc"# JVM参数 指定prod环境
JVM_OPTS="-server \
-Dname=$AppName \
-Dspring.profiles.active=test \
-Duser.timezone=Asia/Shanghai \
-Xms1024m \
-Xmx2048m \
-Xss2m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=$LOG_PATH/heapDump.hprof \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=500 \
-XX:InitiatingHeapOccupancyPercent=45"# 日志函数
log() {echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_PATH"echo "$1"
}# 获取进程ID
get_pid() {pgrep -f "$APP_JAR_PATH"
}
set_env_vars() {}# 启动函数
start() {PID=$(get_pid)if [[ -n "$PID" ]]; thenlog "$AppName is already running (PID: $PID)"elseset_env_varsnohup java $JVM_OPTS -jar "$APP_JAR_PATH" > /usr/local/nginx/app/mall-im_turn_java/jar/tlog.log 2>&1 &log "Starting $AppName..."log "java $JVM_OPTS -jar "$APP_JAR_PATH" > /dev/null 2>&1 &"sleep 2PID=$(get_pid)if [[ -n "$PID" ]]; thenlog "$AppName started successfully (PID: $PID)"elselog "Failed to start $AppName"fifi
}# 停止函数
stop() {PID=$(get_pid)if [[ -n "$PID" ]]; thenlog "Stopping $AppName (PID: $PID)..."kill "$PID"for i in {1..10}; doif ! kill -0 "$PID" 2>/dev/null; thenlog "$AppName stopped successfully"returnfisleep 1donelog "Failed to stop $AppName gracefully, force killing..."kill -9 "$PID"elselog "$AppName is not running"fi
}# 重启函数
restart() {stoplog "Waiting for 5 seconds before restarting..."sleep 5start
}# 状态检查函数
status() {PID=$(get_pid)if [[ -n "$PID" ]]; thenlog "$AppName is running (PID: $PID)"elselog "$AppName is not running"fi
}# 帮助信息
show_help() {echo "Usage: $0 {start|stop|restart|status}"echo "If no arguments are provided, the script will perform a default direct [restart] operation"
}# 主逻辑
case "$1" instart)start;;stop)stop;;restart)restart;;status)status;;*)if [[ -n "$1" ]]; thenshow_helpexit 1elselog "No arguments supplied, restarting..."restartfi;;
esacexit 0

注:

1.linux服务器需要安装jdk才可正常启动运行  

2.git代码-下载的代码主目录一定要有pom.xml文件否则不适配

3.git代码每次使用流水线运行部署-需要手动更新git最新代码,更新成功后再进行部署

相关文章:

  • 飞帆平台 cdn 资源集锦
  • 详解trl中的GRPOTrainer和GRPOConfig
  • DeepSeek R1 7b,Langchain 实现 RAG 知识库 | LLMs
  • 初级达梦dba的技能水准
  • 绝对路径与相对路径
  • uniapp-商城-29-vuex 关于系统状态的管理
  • AIGC-几款医疗健康智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
  • 8节串联锂离子电池组可重构buck-boost均衡拓扑结构 simulink模型仿真
  • 【2】Kubernetes 架构总览
  • 【android bluetooth 框架分析 02】【Module详解 12】【 BidiQueue、BidiQueueEnd、Queue介绍】
  • 10【借用·规则】引用 (``, `mut`):安全、高效地访问数据
  • 每日一题——最小测试用例集覆盖问题
  • javaSE.二叉树的遍历
  • 【Vim】vim的简单使用
  • 【后端开发】MyBatis
  • 26考研 | 王道 | 数据结构 | 第六章 图
  • C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
  • GESP2024年12月认证C++八级( 第一部分选择题(6-10))
  • ArcPy Mapping 模块基础(下)
  • 我的电视 1.0.2 | 提供央视、卫视及地方直播服务的软件
  • 消息人士称哈马斯愿与以色列达成长期停火
  • 李家超将率团访问浙江
  • 独家专访|苏童:《好天气》是一部献给中国郊区的作品
  • 在没有穹顶的剧院,和春天的音乐会来一场约会
  • 财政部:一季度证券交易印花税411亿元,同比增长60.6%
  • 6名驴友庐山西海探险走失被追缴2万救援费,组织者被追缴4千