war빌드 & 실행 Script

YOBY·2024년 6월 17일
0

1.프로젝트를 개발하고 Git으로 커밋을 하면 Webhook 서비스를 이용했다.
Webhook id로 해당 hook을 찾아서 excute-command를 실행해서 내가 원하는 쉘 스크립트를 실행할수 있다고 Git Webhook 사용글에 올려놨다.

  • 혹시 Git webhook 사용법이 궁금하다면 Git Webhook 사용 참고!!

지금은 스프링프로젝트를 만들때 톰캣이 내장되어있기에 해당 내장된 톰캣을 사용하여 실행할것이
다.

#!/bin/bash

home_path=$(dirname $(realpath "$0"))

# 프로젝트 디렉토리 설정
PROJECT_DIR="$home_path/project_daeduk"
REPO_URL="***"  # 깃허브 래포지토리 주소
LOGFILE="$home_path/project_deploy.log"

# 로그 출력 함수
log() {
    echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> "$LOGFILE"
}

log "Starting deployment script"

# 기존 프로젝트 디렉토리 제거
if [ -d "$PROJECT_DIR" ]; then
    log "Removing existing project directory"
    rm -rf "$PROJECT_DIR"
fi

# 프로젝트 클론
log "Cloning project from $REPO_URL"
git clone "$REPO_URL" "$PROJECT_DIR"
if [ $? -ne 0 ]; then
    log "Failed to clone repository"
    exit 1
fi

# Gradle 빌드 실행을 위해 디렉토리 변경
cd "$PROJECT_DIR/daeduk" || { log "Failed to change directory to $PROJECT_DIR/daeduk"; exit 1; }

# Gradle 빌드
log "Building project with Gradle"
./gradlew clean build
if [ $? -ne 0 ]; then
    log "Gradle build failed"
    exit 1
fi

# 빌드된 .war 파일 찾기
WAR_FILE=$(find build/libs -name "*.war" | head -n 1)
if [ -z "$WAR_FILE" ]; then
    log "No .war file found"
    exit 1
fi

log ".war file found: $WAR_FILE"

# 기존 실행되고 있는 war의 프로세스 죽이기
log "Removing existing daeduk.war process"
DAEDUK_PID=$(pgrep -f daeduk.war)

if [ -n "$DAEDUK_PID" ]; then
    kill -9 "$DAEDUK_PID"
    log "Killed existing daeduk.war process (PID: $DAEDUK_PID)"
else
    log "No existing daeduk.war process found"
fi

# 새 .war 파일 실행
log "Starting new .war process"
nohup java -jar "$WAR_FILE" > "$home_path/nohup.out" 2>&1 &
if [ $? -ne 0 ]; then
    log "Failed to start new .war process"
    exit 1
fi

log "Deployment script completed successfully"

# nohup 실행 결과를 로그에 추가
sleep 2
log "nohup output:"
tail -n 10 "$home_path/nohup.out" >> "$LOGFILE"

깃에 커밋하게 되면 클라우드 서버는 해당 깃 래파지토리의 프로젝트를 가져와 .war로 빌드후 해당 war를 실행하는 스크립이다.

0개의 댓글

관련 채용 정보