From 3f0562fc0270d3cd42b9d322be0ddb44275d9d1a Mon Sep 17 00:00:00 2001 From: unam98 Date: Sun, 19 Apr 2026 21:28:51 +0900 Subject: [PATCH 1/9] chore: update prod CodeDeploy app and deployment group name --- .github/workflows/prod-cd.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prod-cd.yml b/.github/workflows/prod-cd.yml index 9a88b77..34afe00 100644 --- a/.github/workflows/prod-cd.yml +++ b/.github/workflows/prod-cd.yml @@ -90,9 +90,9 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_PROD_ACCESS_KEY }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_PROD_SECRET_KEY }} run: - aws deploy create-deployment - --application-name runnect-prod-codedeploy - --deployment-group-name runnect-prod-codedeploy-group + aws deploy create-deployment + --application-name runnect-prod-app + --deployment-group-name runnect-prod-deploy-group --file-exists-behavior OVERWRITE --s3-location bucket=runnect-prod-bucket,bundleType=zip,key=runnect_prod_server.zip --region ap-northeast-2 From 8bc5548a6d05e7a4c61eaba280ee86b3b70aa599 Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 22:06:37 +0900 Subject: [PATCH 2/9] fix: skip tests in prod CI to avoid DB dependency --- .github/workflows/prod-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prod-ci.yml b/.github/workflows/prod-ci.yml index ca4a4df..21cc3df 100644 --- a/.github/workflows/prod-ci.yml +++ b/.github/workflows/prod-ci.yml @@ -40,5 +40,5 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle # 실제 application build - run: ./gradlew build + - name: Build with Gradle + run: ./gradlew build -x test From f9c5f261c5bfcf0bebca53c7c3fd87fd556cbc4f Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 22:20:56 +0900 Subject: [PATCH 3/9] fix: update S3 bucket name to new account bucket --- .github/workflows/prod-cd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prod-cd.yml b/.github/workflows/prod-cd.yml index 34afe00..17e2209 100644 --- a/.github/workflows/prod-cd.yml +++ b/.github/workflows/prod-cd.yml @@ -8,7 +8,7 @@ on: branches: [ main ] # main branch로 push 될 때 실행됩니다. env: - S3_BUCKET_NAME: runnect-prod-bucket + S3_BUCKET_NAME: runnect-prod-bucket-604764467555-ap-northeast-2-an jobs: build: @@ -94,5 +94,5 @@ jobs: --application-name runnect-prod-app --deployment-group-name runnect-prod-deploy-group --file-exists-behavior OVERWRITE - --s3-location bucket=runnect-prod-bucket,bundleType=zip,key=runnect_prod_server.zip + --s3-location bucket=runnect-prod-bucket-604764467555-ap-northeast-2-an,bundleType=zip,key=runnect_prod_server.zip --region ap-northeast-2 From 489a82cc97d800682f1dc1a8e2ae00f10a6982cb Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 22:41:28 +0900 Subject: [PATCH 4/9] chore: redeploy to trigger CodeDeploy From 25cb31b0993795eea9bb3d00cfc25c5a607bfd8e Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 22:56:24 +0900 Subject: [PATCH 5/9] fix: update appspec.yml for Amazon Linux (ec2-user) --- appspec.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/appspec.yml b/appspec.yml index 2b9ffff..ad79218 100644 --- a/appspec.yml +++ b/appspec.yml @@ -2,18 +2,18 @@ version: 0.0 os: linux files: - - source: / - destination: /home/ubuntu/app + - source: / + destination: /home/ec2-user/app overwrite: yes permissions: - object: / pattern: "**" - owner: ubuntu - group: ubuntu + owner: ec2-user + group: ec2-user hooks: AfterInstall: - location: deploy.sh timeout: 300 - runas: ubuntu + runas: ec2-user From 9fb4342d5b55060b686b9ec3cc86982690205d2f Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 22:56:25 +0900 Subject: [PATCH 6/9] fix: rewrite deploy.sh for Amazon Linux single-profile deployment --- scripts/deploy.sh | 115 +++++++++++++--------------------------------- 1 file changed, 32 insertions(+), 83 deletions(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 13e3807..7885aa8 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -1,96 +1,45 @@ #!/bin/bash -BUILD_PATH=$(ls /home/ubuntu/app/server-0.0.1-SNAPSHOT.jar) -JAR_NAME=$(basename $BUILD_PATH) -echo "> build 파일명: $JAR_NAME" - -echo "> build 파일 복사" -DEPLOY_PATH=/home/ubuntu/app/nonstop/jar/ -cp $BUILD_PATH $DEPLOY_PATH - -echo "> 현재 구동중인 Set 확인" -CURRENT_PROFILE=$(curl -s http://localhost/profile) -echo "> $CURRENT_PROFILE" - -# 쉬고 있는 set 찾기: set1이 사용중이면 set2가 쉬고 있고, 반대면 set1이 쉬고 있음 -if [ $CURRENT_PROFILE == set1 ] -then - IDLE_PROFILE=set2 - IDLE_PORT=8082 -elif [ $CURRENT_PROFILE == set2 ] -then - IDLE_PROFILE=set1 - IDLE_PORT=8081 +set -e + +APP_DIR=/home/ec2-user/app +JAR_PATH=$(ls $APP_DIR/*.jar | head -1) +echo "> JAR 파일: $JAR_PATH" + +echo "> 실행 중인 애플리케이션 종료" +CURRENT_PID=$(pgrep -f '\.jar' || true) +if [ -n "$CURRENT_PID" ]; then + echo "> 종료: $CURRENT_PID" + kill -15 $CURRENT_PID + sleep 5 else - echo "> 일치하는 Profile이 없습니다. Profile: $CURRENT_PROFILE" - echo "> set1을 할당합니다. IDLE_PROFILE: set1" - IDLE_PROFILE=set1 - IDLE_PORT=8081 + echo "> 실행 중인 애플리케이션 없음" fi -echo "> application.jar 교체" -IDLE_APPLICATION=$IDLE_PROFILE-Runnect-Spring-Boot-Server.jar -IDLE_APPLICATION_PATH=$DEPLOY_PATH$IDLE_APPLICATION - -ln -Tfs $DEPLOY_PATH$JAR_NAME $IDLE_APPLICATION_PATH - -echo "> $IDLE_PROFILE 에서 구동중인 애플리케이션 pid 확인" -IDLE_PID=$(pgrep -f $IDLE_APPLICATION) - -if [ -z $IDLE_PID ] -then - echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." -else - echo "> kill -15 $IDLE_PID" - kill -15 $IDLE_PID - sleep 20 -fi +echo "> 애플리케이션 시작" +nohup java -jar \ + -Duser.timezone=Asia/Seoul \ + $JAR_PATH \ + >> /home/ec2-user/app/nohup.out 2>&1 & -echo "> $IDLE_PROFILE 배포" -nohup java -jar -Duser.timezone=Asia/Seoul -Dspring.profiles.active=$IDLE_PROFILE $IDLE_APPLICATION_PATH >> /home/ubuntu/app/nohup.out 2>&1 & +echo "> 15초 후 헬스체크 시작" +sleep 15 -echo "> $IDLE_PROFILE 10초 후 Health check 시작" -echo "> curl -s http://localhost:$IDLE_PORT/health " -sleep 10 - -for retry_count in {1..10} -do - response=$(curl -s http://localhost:$IDLE_PORT/actuator/health) - up_count=$(echo $response | grep 'UP' | wc -l) - - if [ $up_count -ge 1 ] - then # $up_count >= 1 ("UP" 문자열이 있는지 검증) - echo "> Health check 성공" - break - else - echo "> Health check의 응답을 알 수 없거나 혹은 status가 UP이 아닙니다." - echo "> Health check: ${response}" +for i in {1..10}; do + RESPONSE=$(curl -s http://localhost:8080/actuator/health || true) + if echo "$RESPONSE" | grep -q '"status":"UP"'; then + echo "> 헬스체크 성공" + break fi - - if [ $retry_count -eq 10 ] - then - echo "> Health check 실패. " - echo "> Nginx에 연결하지 않고 배포를 종료합니다." + echo "> 헬스체크 실패($i/10): $RESPONSE" + if [ $i -eq 10 ]; then + echo "> 배포 실패" exit 1 fi - - echo "> Health check 연결 실패. 재시도..." sleep 10 done -echo "> Nginx 상태 확인" -if ! sudo systemctl is-active --quiet nginx; then - echo "> Nginx가 중지되어 있습니다. 재시작합니다." - sudo systemctl start nginx - sleep 2 - if sudo systemctl is-active --quiet nginx; then - echo "> Nginx 재시작 성공" - else - echo "> Nginx 재시작 실패." - fi -else - echo "> Nginx 정상 구동 중" -fi +echo "> Nginx 시작" +sudo systemctl start nginx || true +sudo systemctl enable nginx || true -echo "> 스위칭" -sleep 10 -/home/ubuntu/app/nonstop/switch.sh +echo "> 배포 완료" From d1f4a025777e0838e2a92e375a46209997f4ca97 Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 23:05:35 +0900 Subject: [PATCH 7/9] chore: redeploy with fixed application.yml From fe6a721c06824ed2a386895f18273a041947400c Mon Sep 17 00:00:00 2001 From: Unam Kim Date: Sun, 19 Apr 2026 23:08:09 +0900 Subject: [PATCH 8/9] fix: exclude plain.jar from deployment --- scripts/deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 7885aa8..e1f60e8 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -2,7 +2,7 @@ set -e APP_DIR=/home/ec2-user/app -JAR_PATH=$(ls $APP_DIR/*.jar | head -1) +JAR_PATH=$(ls $APP_DIR/*.jar | grep -v plain | head -1) echo "> JAR 파일: $JAR_PATH" echo "> 실행 중인 애플리케이션 종료" From d3052de3ae4240b2e8fe4cc925c3193de54c3c4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9A=B0=EB=82=A8?= Date: Sat, 25 Apr 2026 13:54:09 +0900 Subject: [PATCH 9/9] trigger: redeploy with fixed secret