본문 바로가기

⭐ SpringBoot/build (Gradle, Dependency 설정 등)

수동으로 빌드하기 with shellscript

# 수동으로 빌드하기

- 수동 빌드를 하는 이유.

개발환경을 세팅하다보면 CI/CD를 구현하는 것보다 손이 좀 가지만 수동으로 빌드를 하는 경우 공수가 덜 드는 경우가 있다. (개발 환경 세팅이 아직 안된 상태에서 짧은 기간 확인을 위한 빌드 절차? 정도 생각하면 될 듯하다.)

빌드 프로세스는 아래와 같다.

- 보통은 CI/CD를 통해 레포지토리에 업로드 후 빌드를 수행하여 확인을 하지만, 수동으로 하는 경우는 위와 같이 개발자가 IDE에서 직접 Commit / Push를 수행하고 EC2에서 git clone을 하여 수동으로 빌드를 수행한다.

1. IDE와 Git Repository 연동

- InteliJ를 예를들어 설명하자면, 아래와 같이 Git 메뉴에서 Manage Remotes 를 클릭한다.

- Remote 주소를 관리한다.

- Git Commit/Push를 통해 현재의 코드를 해당 레포지토리에 업로드 한다.

2. 업로드 된 코드를 빌드하기

- 빌드가 정상적으로 끝나면 /lib 안에 .jar 파일이 생성된다.

최종적으로 해당 .jar 파일을 실행 한다고 볼 수 있다.

EC2 인스턴스를 생성 후 아래의 코드로 빌드를 수행한다.

- 빌드 명령어의 종류는 다양 하지만 아래의 몇개를 소개하면 다음과 같다.

# 그냥 빌드
sudo ./gradlew build
# 빌드 시 빌드 수행 결과를 확인 (에러도 확인가능)
sudo ./gradlew build --stacktrace
# test 없이 빌드
sudo gradle build --exclude-task test
# 빌드 수행 결과를 확인 및 테스트 없이 빌드 수행
sudo ./gradlew build --stacktrace --exclude-task test

3. 빌드 수행 후 결과 확인하기

- 보통 빌드가 수행되면 /build/libs/안에 jar 파일이 생성이 된다.

해당 jar 파일을 최종적으로 실행하면 된다.

4. jar 파일 실행하기

- 만약 해당 EC2에 java가 설치되어 있지 않다면, java를 설치해 줘야한다. (여기서는 17 버전을 설치 하였다.)

sudo apt-get update

sudo apt install openjdk-17-jre-headless

- 실행 명령어

java -jar app-0.0.1-SNAPSHOT.jar &

- 만약 실행한 실행한 프로세스를 확인하고 싶으면 아래의 명령어를 통해 조회가 가능하다.

ps aux | grep java

- 그리고 해당 프로세스를 중지하고 싶으면 kill -9 명령어를 사용하여 중지가 가능하다.

kill -9 {process id}

5. 웹에서 확인하기

- 네트워크 레이어는 설명하기 어려우니 간단하게 설명하고 넘어가자면, EC2의 Subnet이 Public 환경에 존재해야 하고, 보안그룹을 거쳐 외부에서 접근이 가능해야 한다.

- 외부 접근

ec2_public_ip:8080/api

- 접근 확인하기, Postman

6. 자동실행 쉘 스크립트 만들기

- 위의 과정을 자동으로 실행하는 쉘 스크립트를 만들면 아래와 같다.

vim shellscript.sh 로 파일명을 생성 후 아래의 내용을 저장 하면 된다.

- 중간중간에  sleep을 준건, 선행 과정이 끝난 후 다음 과정이 실행될때의 텀을 주기 위한 요소이다.

#!/bin/bash

# Before Clone Directory Delete
sudo rm -rf /home/ubuntu/source-backend/

# git clone
git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/source-backend

# sleep term
sleep 15s

# gradle auth check
chmod 777 /home/ubuntu/source-backend/gradlew

# sleep term
sleep 30s

# gradlew build
cd /home/ubuntu/source-backend/

# run gradlew
sudo ./gradlew build --stacktrace --exclude-task test

# sleep term
sleep 30s

# run jar
java -jar /home/ubuntu/source-backend/build/libs/app-0.0.1-SNAPSHOT.jar

# sleep term
sleep 60s

# END

- 수동 빌드 끝...