From eae3a4abc86676168b66cba774d0e12e372a6606 Mon Sep 17 00:00:00 2001 From: teho Date: Thu, 18 Apr 2024 18:52:04 +0900 Subject: [PATCH] =?UTF-8?q?[#47]=20feat:=20ci/cd=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appspec.yml | 23 +++++++++++++++++++++++ build.gradle | 4 ++++ scripts/start.sh | 21 +++++++++++++++++++++ scripts/stop.sh | 19 +++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 appspec.yml create mode 100644 scripts/start.sh create mode 100644 scripts/stop.sh diff --git a/appspec.yml b/appspec.yml new file mode 100644 index 00000000..ff9aa755 --- /dev/null +++ b/appspec.yml @@ -0,0 +1,23 @@ +version: 0.0 +os: linux + +files: + - source: / # 인스턴스에 복사할 디렉터리 경로 + destination: /home/ubuntu/Back-end # 인스턴스에서 파일이 복사되는 위치 + overwrite: yes # 복사할 위치에 파일이 있는 경우 대체 + +permissions: + - object: / # 권한이 지정되는 파일 or 디렉터리 + pattern: "**" # 매칭되는 패턴에만 권한 부여 + owner: ubuntu # object의 소유자 + group: ubuntu # object의 그룹 이름 + +hooks: + AfterInstall: # CodeDeploy의 AfterInstall 단계에서 실행 + - location: scripts/stop.sh # hooks에서 실행할 스크립트의 위치 + timeout: 60 # 스크립트 실행에 허용되는 최대 시간, 넘으면 배포 실패 + runas: ubuntu # 스크립트를 실행하는 사용자 + ApplicationStart: # CodeDeploy의 ApplicationStart 단계에서 실행 + - location: scripts/start.sh + timeout: 60 + runas: ubuntu \ No newline at end of file diff --git a/build.gradle b/build.gradle index 362cc10b..7aec247c 100644 --- a/build.gradle +++ b/build.gradle @@ -59,3 +59,7 @@ dependencies { tasks.named('test') { useJUnitPlatform() } + +jar { + enabled = false +} \ No newline at end of file diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100644 index 00000000..b67ac15b --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +PROJECT_ROOT="/home/ubuntu/Back-end" +JAR_FILE="$PROJECT_ROOT/nanaland.jar" + +APP_LOG="$PROJECT_ROOT/application.log" +ERROR_LOG="$PROJECT_ROOT/error.log" +DEPLOY_LOG="$PROJECT_ROOT/deploy.log" + +TIME_NOW=$(date +%c) + +# build 파일 복사 +echo "$TIME_NOW > $JAR_FILE 파일 복사" >> $DEPLOY_LOG +cp $PROJECT_ROOT/build/libs/*.jar $JAR_FILE + +# jar 파일 실행 +echo "$TIME_NOW > $JAR_FILE 파일 실행" >> $DEPLOY_LOG +nohup java -Duser.timezone=Asia/Seoul -jar $JAR_FILE > $APP_LOG 2> $ERROR_LOG & + +CURRENT_PID=$(pgrep -f $JAR_FILE) +echo "$TIME_NOW > 실행된 프로세스 아이디 $CURRENT_PID 입니다." >> $DEPLOY_LOG \ No newline at end of file diff --git a/scripts/stop.sh b/scripts/stop.sh new file mode 100644 index 00000000..df68fcd6 --- /dev/null +++ b/scripts/stop.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +PROJECT_ROOT="/home/ubuntu/Back-end" +JAR_FILE="$PROJECT_ROOT/nanaland.jar" + +DEPLOY_LOG="$PROJECT_ROOT/deploy.log" + +TIME_NOW=$(date +%c) + +# 현재 구동 중인 애플리케이션 pid 확인 +CURRENT_PID=$(pgrep -f $JAR_FILE) + +# 프로세스가 켜져 있으면 종료 +if [ -z $CURRENT_PID ]; then + echo "$TIME_NOW > 현재 실행중인 애플리케이션이 없습니다" >> $DEPLOY_LOG +else + echo "$TIME_NOW > 실행중인 $CURRENT_PID 애플리케이션 종료 " >> $DEPLOY_LOG + kill -15 $CURRENT_PID +fi \ No newline at end of file