AWS EC2 서버에 프로젝트 배포하기(feat. Git) 2
EC2
서버에 배포 스크립트
를 작성해보자.
배포 스크립트 만들기
우리가 하는 프로젝트 빌드는 다음 과정의 의미를 가집니다.
git clone
혹은git pull
을 통해 새 버전의 프로젝트를 받음Gradle
이나Maven
을 통해 프로젝트 테스트, 빌드EC2
서버에서 해당 프로젝트 실행 및 재실행
이번 글에서는 배포할 때마다 하나하나 명령어를 실행하는 것이 아닌, 쉘 스크립트를 작성하여 해당 스크립트만 실행하면 한 번에 앞의 과정이 모두 실행되도록 할 것입니다.
참고로 쉘 스크립트는 .sh
확장자를 가지며, Node JS
가 .js
라는 파일을 통해 서버에서 작동하는 것처럼 쉘 스크립트 역시 리눅스에서 기본적으로 사용할 수 있는 스크립트 파일의 한 종류입니다.
문서 편집기로는 가장 대중적으로 쓰이는 빔(vim)
을 사용하도록 합니다.
먼저 ~/app/step1/
에 deploy.sh
파일을 생성해보겠습니다.
vim ~/app/step1/deploy.sh
혹시 vim
을 처음 사용해본다면, 인터넷에서 vim
사용법에 대해서 검색해보자.
작성할 내용은 다음과 같습니다.
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=[프로젝트 명]
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/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "현재 구동 중인 애플리케이션pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
다 작성했으면 :wq
를 입력하여 저장 후 나가도록 합니다.
- 주의사항 :
Amazon Linux
운영체제를 사용중이 아니라면,REPOSITORY
변수 값을 지정할 때ec2-user
대신에 자신이 사용중인 운영체제의 사용자명을 입력하도록 하고 해당 사용자명은 아래 글에서 확인할 수 있습니다.
[AWS] Windows에서 EC2 인스턴스 접속 (PuTTY)
주요 부분의 의미만 설명하자면, if ~ else
부분은 현재 구동중인 애플리케이션을 종료하는 역할을 합니다.
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
위 부분은 새로 실행할 jar
파일을 찾는 명령어로, 여러 jar
파일이 생길 것이기 때문에 tail -n
으로 가장 나중의 jar
파일(최신 파일)을 찾아서 변수에 저장합니다.
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
위 부분은 찾은 jar
파일을 nohup
으로 실행하는 명령어입니다.
스프링 부트는 외장 톰캣을 설치할 필요 없이 해당 명령어로 바로 jar
파일을 실행할 수 있습니다.
일반적으로 자바를 실행할 때는 java -jar
라는 명령어를 사용하지만, 이렇게 하면 사용자가 터미널 접속을 끊을 때 애플리케이션도 같이 종료됩니다.
따라서 터미널을 종료해도 애플리케이션은 계속 구동될 수 있도록, nohup
명령어를 사용했습니다.
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
해당 부분의 바깥 괄호가 원래 중괄호였는데, 안된다는 이슈가 있어서 소괄호로 바꿨습니다.
현재 위치가 해당 파일이 있는 디렉토리가 아니라면 아래 명령어로 이동하고
cd ~/app/step1/
이제 생성한 스크립트에 실행 권한을 추가합니다.
chmod +x ./deploy.sh
이제 이 스크립트를 다음의 명령어로 실행해 보겠습니다.
./deploy.sh
BUILD SUCCESSFUL
이 출력되며 성공적으로 실행되었을 경우, nohup.out
파일이 생성되며 해당 파일은 실행되는 애플리케이션에서 출력되는 모든 내용을 담고 있습니다.
다음 명령어로 내부를 알아보겠습니다.
vim nohup.out
요약
여기까지 배포 스크립트의 초안을 작성해보았습니다.
- Ref