티스토리 뷰

이번에는 git을 push하고 서버에 올릴 때 AWS EC2에서 직접 디렉토리를 이동하여 git pull + 프로젝트 빌드 + 프로젝트 실행하는 경우 시간이 오래걸리고 번거롭다.

그래서 실행을 한번으로 위 작업들을 하도록 sh파일을 작성하도록 한다.

 

기본정보

- Spring Boot (Gradle 기준)

- AWS EC2

 

- Git clone 한 폴더 

- Spring Boot와 맞는 Java버전 설치

 

.sh 파일 만들기

vi project.sh

: 해당 sh파일 위치는 "home/ec2-user", 프로젝트 위치는 "home/ec2-user/프로젝트 폴더" 이다.

: 해당 파일명은 "project.sh"로 만드는 방법이다.

: 다른 이름으로 하고 싶다면 "원하는이름.sh"으로 만들면 된다.

* Project.sh

 

echo " 현재 구동중인 프로젝트를 찾습니다."
echo "----------------------------------------"

CURRENT_PID=$(pgrep -f 프로젝트 폴더명)

echo "$CURRENT_PID"

if [ -z $CURRENT_PID ]; then
    echo " 현재 구동중인 프로젝트를 종료하지 않습니다."
else
    echo " 현재 구동중인 프로젝트를 종료합니다."
    echo "> kill -2 $CURRENT_PID"
    kill -9 $CURRENT_PID
    sleep 5
fi



ROOT_PATH=/home/ec2-user
cd $ROOT_PATH/프로젝트 폴더명

echo " Git pull 을 실행합니다."
git pull



cd /
cd $ROOT_PATH/프로젝트 폴더명
echo "---------------------------------------"
echo " 프로젝트를 빌드합니다."

./gradlew build --exclude-task test


cd /
cd $ROOT_PATH/프로젝트 폴더명/build/libs
echo "---------------------------------------"
echo " 프로젝트를 실행합니다."

java -jar 설정한JAR파일명.jar

 

작성한 파일 저장방법

1. ESC 키를 눌러 Insert 모드에서 나오도록 한다.
2. :wq를 입력한다. (저장하고 나가기.)

 

작성한 파일 확인법

vi Project.sh

 

- 확인 후 파일 나가는 방법

:q! (나가기.)

 

- 파일 수정하기

1. a 키를 눌러 Insert 모드로 전환한다.

2. 수정한다.

3. :wq를 입력한다. (저장하고 나가기.)

 

* Project.sh 내용 설명 

 

   1. 실행 중 프로젝트를 종료한다.

       -> git pull, 프로젝트 빌드 전 실행 중인 프로젝트를 종료하기 위해 작성한다.

        + 서버에서 프로젝트를 실행하고 있는데 깃이 업데이트 되어 있을 경우 종료하고 빌드 후 다시 서버에 올려야하기 위해 작성함.

 

CURRENT_PID=$(pgrep -f 프로젝트 폴더명)

echo "$CURRENT_PID"

if [ -z $CURRENT_PID ]; then
    echo " 현재 구동중인 프로젝트를 종료하지 않습니다."
else
    echo " 현재 구동중인 프로젝트를 종료합니다."
    echo "> kill -2 $CURRENT_PID"
    kill -9 $CURRENT_PID
    sleep 5
fi

- CURRENT_PID

: 실행중인 프로젝트 PID값을 저장하는 변수

 

- IF ~ else ~ fi

: 실행중인 프로젝트를 찾아 실행중이면 종료한다.

: 실행중이지 않으면 넘어가게 된다.

 

 

2. 프로젝트를 GIT 최신으로 유지하기 위해 PULL한다.

 

ROOT_PATH=/home/ec2-user
cd $ROOT_PATH/프로젝트 폴더명

echo " Git pull 을 실행합니다."
git pull

- ROOT_PATH

: 프로젝트 최상위 폴더가 있는 ROOT 경로

 

- cd $ROOT_PATH/프로젝트 폴더명

: 프로젝트 디렉토리로 이동하는 명령어로 자신의 폴더명에 맞게 작성한다.

 

- git pull

: cd 명령어로 이동된 디렉토리에서 git pull를 하게 된다.

(단, clone했을 때 가져왔던 branch 기준으로 하게 된다.)

 

3. 해당 프로젝트를 빌드한다. 

cd /
cd $ROOT_PATH/프로젝트 폴더명
echo "---------------------------------------"
echo " 프로젝트를 빌드합니다."

./gradlew build --exclude-task test

- ./gradlew build --exclude-tash test

: test를 제외하고 해당 프로젝트를 빌드하여 jar파일을 생성한다.

 

4. 프로젝트를 실행한다.

cd /
cd $ROOT_PATH/프로젝트 폴더명/build/libs
echo "---------------------------------------"
echo " 프로젝트를 실행합니다."

java -jar 설정한JAR파일명.jar

- cd $ROOT_PATH/프로젝트 폴더명/build/libs

: 3.에서 빌드를 하면 jar파일이 생성되는 디렉토리로 cd명령어를 통하여 이동한다.

 

Jar을 통하여 프로젝트를 실행하는 명령어

해당 sh파일은 A. 를 기준으로 작성되었음.

택1. 

A. 백그라운드 실행 X,   AWS 세션 종료시 프로젝트 종료됨.

 java -jar 설정한JAR파일명.jar

 

B. 백그라운드 실행 O,  AWS 세션 종료시 프로젝트 종료됨.

java -jar 설정한JAR파일명.jar &

 

C. 백그라운드 실행 O,  AWS 세션 종료시 프로젝트 종료되지 않음.

nohup java -jar 설정한JAR파일명.jar &

 

sh 파일 실행하기

./project.sh