EC2 인스턴스에 배포 쉘 스크립트 작성하기

개발로그·2021년 10월 10일
0

AWS 이용하기

목록 보기
6/6

배포

EC2인스턴스에 백엔드 프로그램과 프론트엔드 프로그램을 업로드 한 후 구동을 한다. 하지만 매 기능 업데이트시마다 pull받고, build하고, 서버 재시작하고... 너무 번거롭다. 이를 한 번의 명령어를 입력하여 자동화할 수 있도록 쉘 스크립트를 작성한다.

쉘 스크립트 작성

vi deploy.sh

EC2 컨테이너에 deploy.sh 파일을 만든다.
아래 내용을 입력한다. 자신이 자동화할 내용을 적용하여 작성한다.

REPOSITORY=/home/ubuntu
PROJECT_NAME= 백엔드_디렉토리명
PROJECT_NAME2= 프론트엔드_디렉토리명

echo "> 백엔드 프로젝트 디렉토리로 이동"

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git Pull 백엔드 프로젝트"

git pull

echo "> 백엔드 프로젝트 Build 시작"

./gradlew build

echo "> 기본 디렉토리로 이동"

cd $REPOSITORY

echo "> Build 파일 복사"

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/

echo "> 프론트엔드 프로젝트 디렉토리로 이동"

cd $REPOSITORY/$PROJECT_NAME2

echo "> Git Pull 프론트엔드 프로젝트"

git pull

cd build

echo "> 프론트엔트 프로젝트 Build 시작"

npm run build


echo "> 현재 구동중인 애플리케이션 pid 확인"

CURRENT_PID=$(pgrep -f '백엔드_프로젝트_이름')

echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"

if [ -z $CURRENT_PID ]; then
    echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."

else
    echo "> kill -15 $CURRENT_PID"
    kill -15 $CURRENT_PID
    sleep 5

    CURRENT_PID2=$(pgrep -f '백엔드_프로젝트_이름')
    if [ -z $CURRENT_PID2 ]; then
        echo ">정상종료되었습니다."
    else
        echo ">강제 종료합니다."
        kill -9 $CURRENT_PID2
        sleep 5
    fi
fi

echo "> 새 애플리케이션 배포"

cd $REPOSITORY

JAR_NAME=$(ls $REPOSITORY/ | grep '백엔드_프로젝트_이름' | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -jar $REPOSITORY/$JAR_NAME &

쉘 스크립트 실행

이후 해당 쉘스크립트 실행을 통해 위의 과정을 한 번에 처리한다.

./deploy.sh

nohup, &

java -jar jar파일명

명령을 이용하면 jar로 패키징한 프로그램을 실행할 수 있다.
하지만 이렇게 실행한 경우 포그라운드로 실행되며 다른 작업을 할 수 없다.
터미널 연결이 끊어질 경우 프로그램도 종료된다.
stdout으로 프로그램 실행 중 출력내용이 계속 출력된다.

위의 내용을 해결하기 위해 nohup과 &를 사용한다.

nohup 을 통해 stdout으로 출력되는 내용들을 nohup.out에 입력되도록 한다.

& 를 통해 백그라운드에서 프로세스가 실행되도록 한다.

참고 사이트

https://jojoldu.tistory.com/263

profile
백엔드 개발을 공부하고 있습니다.

0개의 댓글