작성한 코드를 배포하려면 다음과 같은 순서가 필요하다.

  1. git clone 혹은 git pull을 통해 새 버전의 프로젝트 받기
  2. Gradle이나 Maven을 통해 프로젝트 테스트 및 빌드
  3. EC2 서버에서 해당 프로젝트 실행 및 재실행

그러나 배포할 때마다 하나하나씩 명령어를 입력하기에는 불편하므로 이 과정을 쉘 스크립트로 작성해 스크립트 실행만 하면 되게 해보자.

#! /bin/bash

REPOSITORY=/home/ec2-user/app/step1 				#변수 저장, 쉘은 타입이 없음
PROJECT_NAME=spring-boot-aws-webservice				#$변수명으로 사용

cd $REPOSITORY/$PROJECT_NAME/						#git clone 받았던 디렉토리 이동

echo "> Git Pull"
git pull											#마스터 브랜치 최신 내용 pull

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

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

echo "> Build 파일 복사"					
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
											#build 결과물인 jar파일을 jar파일 모아둔 위치로 복사
                                            
#기존 수행중이던 스프링 부트 앱 종료
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)	#pgrep은 process id 추출, -f 옵션은 프로세스 이름으로 찾기

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)
#새로 실행할 jar 파일명 찾기 -> 여러 jar 파일이 생기기 때문에 tail -n으로 가장 나중의 jar 파일(최신 파일)을 변수에 저장
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
#찾은 jar 파일명으로 해당 jar 파일을 nohup으로 실행한다.
#내장 톰캣을 사용해서 jar 파일만 있으면 바로 웹 애플리케이션 서버를 실행할 수 있다.
#일반적으로 자바를 실행할 때는 java -jar 라는 명령어를 사용하지만,
#이렇게하면 사용자가 터미널 접속을 끊을 때 애플리케이션도 같이 종료되므로
# 터미널 종료시에도 계속 구동 될 수 있도록 nohup 명령어를 사용한다.

만들어진 스크립트에 실행 권한 추가 후 실행한다.

chmod +x ./deploy.sh
./deploy.sh

  • 앱이름-plain.jar를 생성하지 않기 위해 build.gradle에 수정
  • mariaDB 드라이버 등록 및 서버에서 구동될 환경 구성
  • 스프링 시큐리티가 동작할 환경 구성
  • 등등

그 외 따라 해봤으나... 오류로 안됨

application-real.properties 인식이 안돼서 나는 오류 같은데 다음에 다시 보던지... 해야할듯

메인 페이지는 안들어가지고... login 페이지는 들어가진다 🙃

CI/CD 하는 거 궁금해서 성공시키고 싶었는데 아쉽다.........

profile
블로그 이사 했습니다! 🏠 ⤵

0개의 댓글