이것저것 해보기🌼

Linux(Ubuntu) EC2에서 Spring Boot 배포 스크립트 작성하기 (bash 오류 해결방법) 본문

AWS

Linux(Ubuntu) EC2에서 Spring Boot 배포 스크립트 작성하기 (bash 오류 해결방법)

realtree 2024. 5. 1. 18:05

 

 

1. 내 github repository 클론 및 빌드

 

서버 ssh 접속 후 아래와 같이 진행한다.

//git 설치
sudo apt-get install git
git --version

//배포할 디렉토리 만들기
mkdir ~/app/step1
cd app/step1/

//리파지토리 clone
git clone https://github.com/{my project}.git

//gradlew 가 있는 폴더로 접근 후
./gradlew test

//실행권한 없다고 나오는 경우 (-bash: ./gradlew: Permission denied)
chmod +x ./gradlew

 

 

Spring Boot 빌드 >>

 

 

2. 배포 스크립트 만들기

 

ec2 배포 스크립트에서 해줄일 :

- git clone, pull 로 새 버전 받고

- gradle/maven 으로 테스트, 빌드 후

- 해당 프로젝트 실행

 

스크립트를 만드는 이유는 위 일련의 과정들을 매번 직접 명령어를 실행할 필요없이 자동화 하기 위해서다.

 

스크립트 

#!/usr/bin/env bash

echo start
REPOSITORY=/home/ubuntu/app/step1
PROJECT_NAME=figstudy

cd ${REPOSITORY}/${PROJECT_NAME}/backend/

echo git pull
git pull

./gradlew build

cd ${REPOSITORY}
cp ${REPOSITORY}/${PROJECT_NAME}/backend/build/libs/*.jar ${REPOSITORY}/

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

if [ -z "${CURRENT_PID}" ]
then
        echo no process
else
        echo kill -15 ${CURRENT_PID}
        kill -15 ${CURRENT_PID}
        sleep 5
fi

JAR_NAME=$(ls -tr ${REPOSITORY}/ | grep jar | tail -n 1)

echo ${JAR_NAME}

java -jar ${JAR_NAME} &

 

원래 보통 첫줄에 #!bin/bash 로 하고 

마지막줄에 nohub java -jar ~~.jar & 로 해서 nohub.out 파일에 출력하는데

왜인지 둘다 제대로 안되었다.

 

에러메세지는 이런식으로 떴는데

-bash: ./deploy2.sh: No such file or directory

찾아보니 64비트, 32비트 안맞을때 발생하기도 하고

내 경우에는 bash 가 있는 경로 자체가 /bin/bash 가 아니어서였다.

 

참고 : https://askubuntu.com/questions/420981/how-do-i-save-terminal-output-to-a-file

 

How do I save terminal output to a file?

How do I save the output of a command to a file? Is there a way without using any software? I would like to know how.

askubuntu.com

 

Permisson denied 라는 오류가 발생하는 경우에는 실행 권한을 추가해줘야한다.

스크립트 실행권한 추가하는 명령어는 다음과 같다.

chmod +x ./deploy.sh

 

 

실행결과

 

아무튼 이런식으로 빌드 및 실행이 잘되는것을 확인했다.

 

지금은 application-oauth.properties 파일이 없는 상태라 오류가 안뜨는데 이 경우엔 서버에 해당 파일을 추가하고 java 실행시 옵션으로 넣어주어야한다.