云效部署实现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

bash 复制代码
#!/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" ]]; then
        log "$AppName is already running (PID: $PID)"
    else
		set_env_vars
        nohup 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 2
        PID=$(get_pid)
        if [[ -n "$PID" ]]; then
            log "$AppName started successfully (PID: $PID)"
        else
            log "Failed to start $AppName"
        fi
    fi
}

# 停止函数
stop() {
    PID=$(get_pid)
    if [[ -n "$PID" ]]; then
        log "Stopping $AppName (PID: $PID)..."
        kill "$PID"
        for i in {1..10}; do
            if ! kill -0 "$PID" 2>/dev/null; then
                log "$AppName stopped successfully"
                return
            fi
            sleep 1
        done
        log "Failed to stop $AppName gracefully, force killing..."
        kill -9 "$PID"
    else
        log "$AppName is not running"
    fi
}

# 重启函数
restart() {
    stop
    log "Waiting for 5 seconds before restarting..."
    sleep 5
    start
}

# 状态检查函数
status() {
    PID=$(get_pid)
    if [[ -n "$PID" ]]; then
        log "$AppName is running (PID: $PID)"
    else
        log "$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" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        if [[ -n "$1" ]]; then
            show_help
            exit 1
        else
            log "No arguments supplied, restarting..."
            restart
        fi
        ;;
esac

exit 0

注:

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

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

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

相关推荐
七夜zippoe10 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64811 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满11 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠11 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90312 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技13 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀13 小时前
Linux环境变量
linux·运维·服务器
zzzsde13 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º15 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~15 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化