[EC2] 배포 및 간단한 쉘 스크립트 작성카테고리 없음2023. 7. 31. 20:39
Table of Contents
배포
먼저 EC2에 접속한 다음 github에 업로드한 프로젝트를 clone한다.
git clone 저장소 주소
받은 프로젝트 Build Test
./gradlew build
만약 permission 에러가 발생하면 아래 명령으로 권한을 추가해준다.
chmod +x ./gradlew
이후 git pull 명령을 실행해서 pull이 잘 되는지도 확인한다.
쉘 스크립트
git 폴더가 아닌 다른 폴더에 스크립트 파일을 생성한다.
vim ~/app/git/deploy.sh
내용 작성
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=freelec-springboot2-webservice
PROJECT_FILENAME=SpringPractice-0.0.1-SNAPSHOT.jar
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git pull"
git pull
echo "> 프로젝트 Build 시작"
./gradlew build
echo "> step1 디렉토리로 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/$PROJECT_FILENAME $REPOSITORY/
# 프로세스 이름으로 PID 검색
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f "${PROJECT_FILENAME}")
if [ -z "$CURRENT_PID" ]; then
echo "현재 실행 중인 $PROJECT_FILENAME 프로세스가 없습니다."
else
echo "현재 실행 중인 $PROJECT_FILENAME 프로세스 PID: $CURRENT_PID"
echo "프로세스를 종료합니다."
kill -15 $CURRENT_PID
fi
echo "> 새 애플리케이션 배포"
nohup java -jar \
-Dspring.config.location=classpath:/application.properties,classpath:/application-real.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties \
-Dspring.profiles.active=real \
$PROJECT_FILENAME > $REPOSITORY/nohup.out 2>&1 &
Build 시에는 외부 properties가 아닌 test/resource 위치에 application.properties 파일을 넣어뒀기 때문에 에러없이 빌드가 가능하다.
java -jar 실행 당시 아래 명령을 옵션으로 추가하면 외부 properties 파일을 적용할 수 있다.
-Dspring.config.location-classpath:/application.properties, 외부에서 가져올 properties 파일 위치
지금 작성한 쉘 스크립트만으론 매번 개발자가 스크립트를 실행하고 확인해야하기 때문에 번거롭다.
쉘 스크립트 작성에 대해서 공부해보면서 에러가 자주 발생하다보니 계속 수동으로 실행하면서 CICD 자동화가 정말 필요하다고 느꼈다.
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!