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
'AWS' 카테고리의 다른 글
AWS EC2 Linux 2003에 React 배포하기 (0) | 2024.03.21 |
---|---|
AWS EC2 Linux 2003에 Node.js 설치 (0) | 2024.03.21 |
AWS EC2 프리티어 메모리 부족현상 (0) | 2024.03.21 |
Git pull, push 할 때 username, password 생략하기 (0) | 2024.03.20 |
AWS EC2 인스턴스에 SpringBoot 프로젝트 배포 (0) | 2024.03.20 |