Spring Boot 애플리케이션을 위한 쉘 스크립트 자동화

스크립트로 실행할 수 있는 작업은 수동으로 nohup java -jar 명령을 사용하지 않습니다.

1. 매개변수 설명

다음은 네 가지 매개변수를 지원하는 최종 코드 구현입니다:
  • 작업(operation): new-새 패키지 시작 / replace-기존 패키지 교체
  • 환경(env_para): 설정 파일 지정, 예: test / prod / dev 등
  • 새_jar_파일명(new_jar_file_name): 새 JAR 파일의 이름, 이 스크립트는 새 및 이전 JAR 파일과 동일한 디렉토리에 있어야 합니다.
  • 이전_jar_파일명(old_jar_file_name): 이전 JAR 파일의 이름, 동일한 위치 요구 사항이 적용됩니다.

2. 쉘 스크립트

#!/bin/bash

# 첫 번째 인수 확인
if [ -z "$1" ]; then
    echo "작업 유형(새로 시작 또는 교체)을 입력해야 합니다."
    exit 1
fi

# 두 번째 인수가 필요한 경우 확인
if [ "$1" = "new" ] || [ "$1" = "replace" ]; then
    if [ -z "$3" ]; then
        echo "새 JAR 파일 이름을 입력해야 합니다."
        exit 1
    fi
fi

작업=$1
환경=$2
새_jar=$3
이전_jar=$4

case $작업 in
    new)
        # 새로운 JAR 파일 시작
        source /etc/profile
        nohup java -jar -Duser.timezone=Asia/Seoul -Dspring.profiles.active=$환경 ./$새_jar >/dev/null 2>&1 &
        echo "새 JAR 파일이 시작되었습니다: $새_jar"
        ;;
    
    replace)
        echo "새 버전 업데이트 중..."
        
        # 이전 JAR 파일 프로세스 찾기 및 종료
        echo "이전 JAR 파일 프로세스를 종료 중..."
        프로세스_ids=$(pgrep -f $이전_jar)
        
        if [ -n "$프로세스_ids" ]; then
            for pid in $프로세스_ids; do
                echo "프로세스 $pid를 종료합니다"
                sudo kill -9 $pid
            done
        fi
        
        echo "4초 대기 중"
        sleep 4
        
        # 새로운 JAR 파일 시작
        source /etc/profile
        nohup java -jar -Duser.timezone=Asia/Seoul -Dspring.profiles.active=$환경 ./$새_jar >/dev/null 2>&1 &
        echo "새 JAR 파일이 시작되었습니다: $새_jar"
        ;;
    
    *)
        echo "알 수 없는 작업: $작업"
        echo "사용법: ./deploy.sh [new|replace] [test|prod] [new_jar_name] [old_jar_name_for_replace]"
        exit 1
        ;;
esac

3. 사용 시 주의사항

스크립트를 새로운 환경에 복사한 후에는 다음 명령어로 실행 권한을 부여해야 합니다:
chmod +x deploy.sh
./deploy.sh replace test new-springboot.jar old_springboot.jar

4. 스크립트 작성 시 고려사항

스크립트 작성 시 다음과 같은 사항을 주의해야 합니다:
  • Windows에서 Linux로 파일을 복사하면 줄 바꿈 문자가 일치하지 않을 수 있으므로 dos2unix 명령어를 설치하여 변환해야 합니다;
  • process_ids의 각 pid를 반복해서 kill해야 합니다;
  • kill 이후에는 반드시 sleep 4와 source /etc/profile을 호출해야 합니다. 그렇지 않으면 올바르게 kill되지만 새로운 JAR 파일이 시작되지 않을 수 있습니다.

태그: Spring Boot shell script Deployment Automation Unix Commands

7월 3일 00:54에 게시됨