[EC2] 배포 및 간단한 쉘 스크립트 작성

배포

먼저 EC2에 접속한 다음 github에 업로드한 프로젝트를 clone한다.

git clone 저장소 주소

 

받은 프로젝트 Build Test

./gradlew build

만약 permission 에러가 발생하면 아래 명령으로 권한을 추가해준다.

chmod +x ./gradlew

이후 git pull 명령을 실행해서 pull이 잘 되는지도 확인한다.

 

쉘 스크립트

git 폴더가 아닌 다른 폴더에 스크립트 파일을 생성한다.

vim ~/app/git/deploy.sh

내용 작성

#!/bin/bash

REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=freelec-springboot2-webservice
PROJECT_FILENAME=SpringPractice-0.0.1-SNAPSHOT.jar

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git pull"
git pull

echo "> 프로젝트 Build 시작"
./gradlew build

echo "> step1 디렉토리로 이동"
cd $REPOSITORY

echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/$PROJECT_FILENAME $REPOSITORY/

# 프로세스 이름으로 PID 검색
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f "${PROJECT_FILENAME}")

if [ -z "$CURRENT_PID" ]; then
    echo "현재 실행 중인 $PROJECT_FILENAME 프로세스가 없습니다."
else
    echo "현재 실행 중인 $PROJECT_FILENAME 프로세스 PID: $CURRENT_PID"
    echo "프로세스를 종료합니다."
    kill -15 $CURRENT_PID
fi

echo "> 새 애플리케이션 배포"
nohup java -jar \
    -Dspring.config.location=classpath:/application.properties,classpath:/application-real.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties \
    -Dspring.profiles.active=real \
    $PROJECT_FILENAME > $REPOSITORY/nohup.out 2>&1 &

Build 시에는 외부 properties가 아닌 test/resource 위치에 application.properties 파일을 넣어뒀기 때문에 에러없이 빌드가 가능하다.

 

java -jar 실행 당시 아래 명령을 옵션으로 추가하면 외부 properties 파일을 적용할 수 있다.

-Dspring.config.location-classpath:/application.properties, 외부에서 가져올 properties 파일 위치

 

지금 작성한 쉘 스크립트만으론 매번 개발자가 스크립트를 실행하고 확인해야하기 때문에 번거롭다.

쉘 스크립트 작성에 대해서 공부해보면서 에러가 자주 발생하다보니 계속 수동으로 실행하면서 CICD 자동화가 정말 필요하다고 느꼈다.