云效部署实现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最新代码,更新成功后再进行部署

相关推荐
dapeng-大鹏2 小时前
KVM+LVM 零停机在线扩容 Ubuntu 根分区:从磁盘添加到逻辑卷扩展完整
linux·运维·ubuntu·磁盘空间扩展
乐维_lwops2 小时前
案例解读|运维监控助力某大型卷烟厂构建高效运维监控体系
运维·运维案例
JiaWen技术圈2 小时前
网站用户注册行为验证码方案
运维·安全
仙柒4152 小时前
Docker存储原理
运维·docker·容器
DolphinDB2 小时前
漫长人工,耗费存储?用 BackupRestore 模块一站式解决跨环境数据同步难题
运维·后端·架构
神奇椰子5 小时前
[特殊字符] 服务器搭建网站完整教程
运维·服务器
慧都小妮子5 小时前
告别看图抓数据:DeviceXPlorer OPC Server 助力数据自动化管理
运维·物联网·自动化·takebishi·dxpserver·opc server
Wpa.wk5 小时前
APP自动化-Appium环境安装
运维·appium·自动化
快乐的哈士奇5 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
数智化管理手记5 小时前
精益生产3步实操,让现场从混乱变标杆
大数据·运维·网络·人工智能·精益工程