前言
?記錄下使用云效部署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/jarmkdir -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最新代碼,更新成功后再進行部署