AWS

AWS EC2 인스턴스에 SpringBoot 프로젝트 배포 (배포 스크립트)

심나라 2024. 3. 21. 14:22
728x90

 

Spring Boot 프로젝트를 서버에 배포하기 위해서 매번 명령어로 처리하기 번거롭기 때문에 스크립트를 작성하여 스크립트 실행만으로 배포가 완료 되도록 처리 합니다.

1. 배포과정

  • gi clone 또는 git pull 을 이용해서 변경된 소스를 내려받음
  • Gradle을 이용해서 프로젝트 빌드와 테스트를 진행
  • EC2 서버에서 해당 프로젝트 실행

https://ksshim.tistory.com/142

 

AWS EC2 인스턴스에 SpringBoot 프로젝트 배포

ec2 서버에서 git에 있는 소스를 내려받은 후, gradlew를 이용해서 소스를 빌드하는 과정입니다. 1. EC2에 Git 설치 및 설치된 버전 확인 $ sudo yum update // 초기에 package 들을 update 해준다. $ sudo yum install g

ksshim.tistory.com

 

2. deploy.sh 파일 생성

#!/bin/bash
REPOSITORY=/home/ec2-user/app/git-source
PROJECT_DIR=/home/ec2-user/app
PROJECT_NAME=testApi
JAR_FILE_NAME=testApi-0.0.1-SNAPSHOT.jar

cd $REPOSITORY/$PROJECT_NAME/

echo "> git pull"
git pull

echo "> project build start"
./gradlew build

echo "> repository directory move"
cd $REPOSITORY

echo "> build(.jar) file copy"
cp $REPOSITORY/$PROJECT_NAME/build/libs/$JAR_FILE_NAME $PROJECT_DIR/$PROJECT_NAME/

echo "> project dir move"
cd $PROJECT_DIR/$PROJECT_NAME

echo "> check th currently running app PID"
CURRENT_PID=$(pgrep -f ${JAR_FILE_NAME})

echo "> currently running app PID : $CURRENT_PID"

if [ -z "$CURRENT_PID" ]; then
    echo "> currently running app no";
else
    echo "> kill -15 $CURRENT_PID stop"
    kill -15 $CURRENT_PID
    sleep 5
fi

echo "> new app deploy"
nohup java -jar $PROJECT_DIR/$PROJECT_NAME/$JAR_FILE_NAME 2>&1 &

 

CURRENT_PID=$(pgrep -f ${JAR_FILE_NAME})
현재 구동중인 스프링부트 애플리케이션의 pid를 확인
pgrep : process id 만 추출하는 명령어
-f : 프로세스 이름으로 찾기

if ~ else ~ fi
현재 구동중인 프로세스의 유무를 판단해서 PID가 있는경우 해당프로세스 종료

 

nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
해당 jar 파일을 nohup 으로 실행함. 
java -jar : 자바프로그램을 실행 할 수도있지만, 그런 경우 터미널을 종료하면 프로그램도 종료됨.
nohup 명령어를 앞에 사용하면 사용자가 터미널을 종료해도 프로그램 실행이 게속 유지됨.

 

 

728x90