TY blog

Spring boot 배포 스크립트 작성 본문

DevOps

Spring boot 배포 스크립트 작성

주짓수하는 개발자 2024. 5. 8. 15:04

Bash는 Unix 계열 운영체제에서 사용되는 명령 줄 인터페이스를 위한 쉘(shell)로 스크립팅 언어로 분류되어 컴파일 없이 바로 해석되어 실행되는데 이것을 응용해서 배포 스크립트 파일을 만들 수 있다.

 

Spring Boot Gradle 기반 인스턴스 배포 Flow

 

전체 흐름으로는 프로젝트 패키지에서

실행파일을 생성(Build)하고 파일을 실행(배포) 하는 작업

 

1. Gradle Build에 필요한 파일 설명 

 

1. gradle-wrapper.jar : wrapper 파일이며 실행 스크립트의 동작을 도와준다.

  • 파일위치 : gradle/wrapper/
  • 설정파일 : gradle-wrapper.properties

2. gradlew : 유닉스용 wrapper 실행 스크립트

  • 컴파일, 빌드 등을 하는 경우 사용
  • * 빌드 : 소스코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 애플리케이션으로 만들어주는 과정
1. build/libs 폴더에 애플리케이션 실행 jar 파일 생성 명령어
gradlew clean build

 

* clean : 이전 빌드에서 생성된 모든 빌드 아티팩트를 정리 
* build : 프로젝트 빌드

 

2. 생성된 jar 파일 실행
# 먼저 선행작업으로 Java가 설치되어 있어야 한다. 

1. 애플리케이션 실행시키기(리눅스 창 종료시 애플리케이션도 종료된다.)
java -jar #{애플리케이션 jar파일}

2. 애플리케이션 백그라운드에서 실행시키기 
nohup java -jar #{애플리케이션 jar파일} &

 

 

위에 작업을 한 번에 진행할 배포 스크립트 파일 작성 

* 선행작업으로 Github 원격 저장소에 프로젝트가 연결되고 Java가 설치되어 있어야 한다. 

# 1. 이 스크립트 파일은 Bash 셸에서 해석되어야 하는 것을 지정 
#!/bin/bash

# 2. 자주사용하는 지역변수 정의 
REPOSITORY=/home/ubuntu
PROJECT_NAME=springProfile_v2

# 3. 프로젝트 폴더로 이동
cd $REPOSITORY/$PROJECT_NAME

# 4. 스크립트가 정상 실행되는지 확인하는 출력문
echo "> Git pull"

# 5. github에 변경된 파일 가져오기 
git pull

echo "> 프로젝트Build 시작"

# 6. Jar 파일을 생성해 주는 Build 진행 
./gradlew build

echo "> 현재 구동중인 애플리케이션 pid 확인"

# 7. 현재 실행중인 Application 프로세스 ID 확인 (ID값 리턴)
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

echo "> 현재 구동중인 애플리케이션 pid : $CURRENT_PID" 

# 8. ID값 유무 확인하는 IF ELSE 문 
if [ -z "$CURRENT_PID"]; then
	echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."

# 9. 실행되고 있는 애플리케이션이 있으면 종료(kill)
else 
	echo "> kill -15 $CURRENT_PID"
	kill -15 $CURRENT_PID
    
    # 10. 종료시 실행되는 시간 약 5초 대기 
	sleep 5

fi

echo "> 새 애플리케이션 배포"
JAR_NAME=$PROJECT_NAME-0.0.1-SNAPSHOT.jar

echo "> JAR Name : $JAR_NAME"

# 11. 실행 애플리케이션은 백그라운드 환경에서 실행되게 설정, 오류나 다른 출력은 버리기 
nohup java -jar $REPOSITORY/$PROJECT_NAME/build/libs/$JAR_NAME > /dev/null 2>&1 &

배포 스크립트 흐름

 

* 참고서적 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

Comments