diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index cb614bf7..98d0796a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -9,18 +9,16 @@ name: BackEnd - CI/CD(build)
on:
pull_request:
- branches: [ "main","develop" ]
+ branches: [ "develop", "release/v**", "main" ]
push:
- branches: [ "develop" ]
+ branches: [ "develop", "release/v**" ]
permissions:
contents: read
jobs:
build:
-
runs-on: ubuntu-latest
-
steps:
- uses: actions/checkout@v3
# JDK를 17 버전으로 셋팅한다.
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy-dev.yml
similarity index 67%
rename from .github/workflows/deploy.yml
rename to .github/workflows/deploy-dev.yml
index 2959257a..acfb5c18 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy-dev.yml
@@ -9,28 +9,33 @@ name: BackEnd - CI/CD(deploy)
on:
pull_request:
- types: [ closed ]
branches: [ "develop" ]
+ types: [ closed ]
+
permissions:
contents: read
jobs:
- deploy:
+ deploy-dev:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
-
+ environment: develop
+ env:
+ DEPLOYMENT_GROUP_NAME: meeteam-dev
+ S3_BUCKET_DIR_NAME: dev
steps:
- - uses: actions/checkout@v3
+ - name: ✅ Checkout branch
+ uses: actions/checkout@v3
# JDK를 17 버전으로 셋팅한다.
- - name: Set up JDK 17
+ - name: ⚙️ Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# Gradle을 캐싱한다 -> 빌드 속도가 증가하는 효과가 있다.
- - name: Gradle 캐싱
+ - name: ✅ Gradle 캐싱
uses: actions/cache@v3
with:
path: |
@@ -41,15 +46,19 @@ jobs:
${{ runner.os }}-gradle-
# 프로젝트 저장소에 업로드하면 안되는 설정 파일들을 만들어줍니다.
- - name: Make application.yml & KEYS & ApproveMail.html
+ - name: 🗂️ Make config
run: |
# src/main/resources 경로 이동
- cd ./src/main/resources
+ cd ./src/main/resources
# yml 파일 생성
touch ./application-dev.yml
echo "$APPLICATION_DEV" > ./application-dev.yml
+ # 키 파일 생성
+ touch ./private-key.pem
+ echo "$CLOUD_FRONT_KEY" > ./private-key.pem
+
# 폴더 생성
mkdir templates
@@ -69,49 +78,49 @@ jobs:
MAIL_APPROVE_TEMPLATE: ${{ secrets.MAIL_APPROVE_TEMPLATE }}
MAIL_VERIFY_TEMPLATE: ${{ secrets.MAIL_VERIFY_TEMPLATE }}
MAIL_APPLICATION_NOTIFICATION_TEMPLATE: ${{ secrets.MAIL_APPLICATION_NOTIFICATION_TEMPLATE }}
+ CLOUD_FRONT_KEY: ${{ secrets.CLOUD_FRONT_KEY }}
shell: bash
- - name: Gradle 권한 부여
+ - name: ⚙️ Gradle 권한 부여
run: chmod +x gradlew
- - name: Gradle로 빌드 실행
+ - name: ⚙️ Gradle로 빌드 실행
run: ./gradlew bootjar
-
-
- # 배포에 필요한 여러 설정 파일과 프로젝트 빌드파일을 zip 파일로 모아줍니다.
- - name: zip file 생성
+ # 배포에 필요한 여러 설정 파일과 프로젝트 빌드파일을 zip 파일로 모아준다.
+ - name: 📦 zip file 생성
run: |
mkdir deploy
- cp ./docker/docker-compose.blue.yml ./deploy/
- cp ./docker/docker-compose.green.yml ./deploy/
+ mkdir deploy/dev
+ cp ./docker/dev/docker-compose.dev.yml ./deploy/dev
+ cp ./docker/dev/Dockerfile ./deploy/dev
+ cp ./src/main/resources/private-key.pem ./deploy/dev
+ cp ./build/libs/*.jar ./deploy/dev
cp ./appspec.yml ./deploy/
- cp ./docker/Dockerfile ./deploy/
- cp ./scripts/*.sh ./deploy/
- cp ./build/libs/*.jar ./deploy/
- zip -r -qq -j ./spring-build.zip ./deploy
+ cp ./scripts/deploy.sh ./deploy/
+ zip -r -qq ./spring-app.zip ./deploy
- # AWS에 연결해줍니다.
- - name: AWS 연결
+ # AWS에 연결해준다.
+ - name: 🌎 AWS 연결
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- # S3에 프로젝트를 업로드 합니다.
- - name: S3에 프로젝트 업로드
+ # S3에 프로젝트를 업로드 한다.
+ - name: 🚛 S3에 프로젝트 업로드
run: |
aws s3 cp \
--region ap-northeast-2 \
- ./spring-build.zip s3://meeteam-backend-bucket
+ ./spring-app.zip s3://${{ secrets.S3_BUCKET_NAME }}/${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip
- # CodeDelploy에 배포를 요청합니다.
- - name: Code Deploy 배포 요청
+ # CodeDelploy에 배포를 요청한다.
+ - name: 🚀 Code Deploy 배포 요청
run: aws deploy create-deployment --application-name meeteam-app
--deployment-config-name CodeDeployDefault.OneAtATime
- --deployment-group-name meeteam-app
- --s3-location bucket=meeteam-backend-bucket,bundleType=zip,key=spring-build.zip
+ --deployment-group-name ${{ env.DEPLOYMENT_GROUP_NAME }}
+ --s3-location bucket=${{ secrets.S3_BUCKET_NAME }},bundleType=zip,key=${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip
- name: Discord 알림 봇
uses: sarisia/actions-status-discord@v1
diff --git a/.github/workflows/deploy-prod.yml b/.github/workflows/deploy-prod.yml
new file mode 100644
index 00000000..935108d8
--- /dev/null
+++ b/.github/workflows/deploy-prod.yml
@@ -0,0 +1,131 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
+
+name: BackEnd - CI/CD(deploy)
+
+on:
+ pull_request:
+ branches: [ "main" ]
+ types: [ closed ]
+
+
+permissions:
+ contents: read
+
+jobs:
+ deploy-prod:
+ if: github.event.pull_request.merged == true
+ runs-on: ubuntu-latest
+ environment: production
+ env:
+ DEPLOYMENT_GROUP_NAME: meeteam-app
+ S3_BUCKET_DIR_NAME: prod
+ steps:
+ - name: ✅ Checkout branch
+ uses: actions/checkout@v3
+ # JDK를 17 버전으로 셋팅한다.
+ - name: ⚙️ Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+
+ # Gradle을 캐싱한다 -> 빌드 속도가 증가하는 효과가 있다.
+ - name: ✅ Gradle 캐싱
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
+ restore-keys: |
+ ${{ runner.os }}-gradle-
+
+ # 프로젝트 저장소에 업로드하면 안되는 설정 파일들을 만들어줍니다.
+ - name: 🗂️ Make config
+ run: |
+ # src/main/resources 경로 이동
+ cd ./src/main/resources
+
+ # yml 파일 생성
+ touch ./application-prod.yml
+ echo "$APPLICATION_PROD" > ./application-prod.yml
+
+ # 키 파일 생성
+ touch ./private-key.pem
+ echo "$CLOUD_FRONT_KEY" > ./private-key.pem
+
+ # 폴더 생성
+ mkdir templates
+
+ # 메일 관련된 html 파일 생성
+ cd ./templates
+ touch ./ApproveMail.html
+ echo "$MAIL_APPROVE_TEMPLATE" > ./ApproveMail.html
+
+ touch ./UniversityAuthMail.html
+ echo "$MAIL_VERIFY_TEMPLATE" > ./UniversityAuthMail.html
+
+ touch ./ApplicationNotificationMail.html
+ echo "$MAIL_APPLICATION_NOTIFICATION_TEMPLATE" > ./ApplicationNotificationMail.html
+
+ env:
+ APPLICATION_PROD: ${{ secrets.APPLICATION_PROD }}
+ MAIL_APPROVE_TEMPLATE: ${{ secrets.MAIL_APPROVE_TEMPLATE }}
+ MAIL_VERIFY_TEMPLATE: ${{ secrets.MAIL_VERIFY_TEMPLATE }}
+ MAIL_APPLICATION_NOTIFICATION_TEMPLATE: ${{ secrets.MAIL_APPLICATION_NOTIFICATION_TEMPLATE }}
+ CLOUD_FRONT_KEY: ${{ secrets.CLOUD_FRONT_KEY }}
+ shell: bash
+
+ - name: ⚙️ Gradle 권한 부여
+ run: chmod +x gradlew
+
+ - name: ⚙️ Gradle로 빌드 실행
+ run: ./gradlew bootjar
+ # 배포에 필요한 여러 설정 파일과 프로젝트 빌드파일을 zip 파일로 모아준다.
+ - name: 📦 zip file 생성
+ run: |
+ mkdir deploy
+ mkdir deploy/prod
+ cp ./docker/prod/docker-compose.prod.yml ./deploy/prod
+ cp ./docker/prod/Dockerfile ./deploy/prod
+ cp ./src/main/resources/private-key.pem ./deploy/prod
+ cp ./build/libs/*.jar ./deploy/prod
+ cp ./scripts/deploy.sh ./deploy/
+ cp ./appspec.yml ./deploy/
+ zip -r -qq ./spring-app.zip ./deploy
+
+
+ # AWS에 연결해준다.
+ - name: 🌎 AWS 연결
+ uses: aws-actions/configure-aws-credentials@v1
+ with:
+ aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws-region: ${{ secrets.AWS_REGION }}
+
+ # S3에 프로젝트를 업로드 한다.
+ - name: 🚛 S3에 프로젝트 업로드
+ run: |
+ aws s3 cp \
+ --region ap-northeast-2 \
+ ./spring-app.zip s3://${{ secrets.S3_BUCKET_NAME }}/${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip
+
+ # CodeDelploy에 배포를 요청한다.
+ - name: 🚀 Code Deploy 배포 요청
+ run: aws deploy create-deployment --application-name meeteam-app
+ --deployment-config-name CodeDeployDefault.OneAtATime
+ --deployment-group-name ${{ env.DEPLOYMENT_GROUP_NAME }}
+ --s3-location bucket=${{ secrets.S3_BUCKET_NAME }},bundleType=zip,key=${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip
+
+ - name: Discord 알림 봇
+ uses: sarisia/actions-status-discord@v1
+ if: ${{ failure() }}
+ with:
+ title: ❗️ Backend CD failed ❗️
+ webhook: ${{ secrets.DISCORD_WEBHOOK }}
+ color: FF0000
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 012ccb18..1646b5b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,7 +177,7 @@ replay_pid*
# End of https://www.toptal.com/developers/gitignore/api/intellij,java
-*.yml
+src/**/*.yml
*.sql
*.html
src/main/generated
diff --git a/appspec.yml b/appspec.yml
index 10b3366e..43d0fc97 100644
--- a/appspec.yml
+++ b/appspec.yml
@@ -11,6 +11,7 @@ files:
destination: /home/ubuntu/app
# 대상 경로에 이미 파일이 존재하는 경우, 덮어쓰기를 허용할지 여부
overwrite: yes
+file_exists_behavior: OVERWRITE
# 파일 및 디렉토리 권한에 관련된 설정
permissions:
diff --git a/docker/Dockerfile b/docker/dev/Dockerfile
similarity index 92%
rename from docker/Dockerfile
rename to docker/dev/Dockerfile
index c84cd232..a71d1a79 100644
--- a/docker/Dockerfile
+++ b/docker/dev/Dockerfile
@@ -5,6 +5,6 @@ ARG JAR_FILE=*.jar
### JAR_FILE 경로에 해당하는 파일을 Docker 이미지 내부로 복사한다.
COPY ${JAR_FILE} meeteam.jar
### CloudFront Private Key 복사
-COPY private_key.pem /app/private_key.pem
+COPY private-key.pem /app/private-key.pem
### Docker 컨테이너가 시작될 때 실행할 명령을 지정한다.
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=dev","-Duser.timezone=Asia/Seoul","meeteam.jar"]
diff --git a/docker/dev/docker-compose.dev.yml b/docker/dev/docker-compose.dev.yml
new file mode 100644
index 00000000..123e797e
--- /dev/null
+++ b/docker/dev/docker-compose.dev.yml
@@ -0,0 +1,26 @@
+version: '3.8'
+
+networks:
+ development_network:
+ driver: bridge
+
+services:
+ redis:
+ image: "redis:alpine"
+ container_name: redis-dev
+ networks:
+ - development_network
+ expose:
+ - "6379"
+
+ spring-app:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ container_name: dev-spring-app
+ environment:
+ - SPRING_PROFILES_ACTIVE=dev
+ networks:
+ - development_network
+ ports:
+ - "1821:8080"
diff --git a/docker/docker-compose.blue.yml b/docker/docker-compose.blue.yml
deleted file mode 100644
index 5b2624a2..00000000
--- a/docker/docker-compose.blue.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-#blue
-version: '3'
-services:
- # 서비스의 이름
- backend:
- # 현재 디렉토리에서의 Dockerfile을 사용하여 Docker 이미지를 빌드
- build: .
- # 호스트의 8081 포트와 컨테이너의 80 포트를 매핑
- environment:
- TZ: "Asia/Seoul"
- ports:
- - "8081:8080"
- # 컨테이너의 이름
- container_name: spring-blue
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - /home/ubuntu/app/log:/log
\ No newline at end of file
diff --git a/docker/docker-compose.green.yml b/docker/docker-compose.green.yml
deleted file mode 100644
index 2bfc80ad..00000000
--- a/docker/docker-compose.green.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-#green
-version: '3'
-services:
- backend:
- build: .
- ports:
- - "8082:8080"
- container_name: spring-green
- environment:
- TZ: "Asia/Seoul"
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - /home/ubuntu/app/log:/log
\ No newline at end of file
diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile
new file mode 100644
index 00000000..0687d2e9
--- /dev/null
+++ b/docker/prod/Dockerfile
@@ -0,0 +1,10 @@
+### Docker 이미지를 생성할 때 기반이 되는 베이스 이미지를 설정한다.
+FROM openjdk:17
+### Dockerfile 내에서 사용할 변수 JAR_FILE을 정의한다.
+ARG JAR_FILE=*.jar
+### JAR_FILE 경로에 해당하는 파일을 Docker 이미지 내부로 복사한다.
+COPY ${JAR_FILE} meeteam.jar
+### CloudFront Private Key 복사
+COPY private-key.pem /app/private-key.pem
+### Docker 컨테이너가 시작될 때 실행할 명령을 지정한다.
+ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","-Duser.timezone=Asia/Seoul","meeteam.jar"]
diff --git a/docker/prod/docker-compose.prod.yml b/docker/prod/docker-compose.prod.yml
new file mode 100644
index 00000000..7efe4d6c
--- /dev/null
+++ b/docker/prod/docker-compose.prod.yml
@@ -0,0 +1,44 @@
+version: '3.8'
+
+networks:
+ production_network:
+ name: production_network
+ driver: bridge
+
+services:
+ redis:
+ image: "redis:alpine"
+ container_name: redis
+ restart: always
+ networks:
+ - production_network
+ expose:
+ - "6379"
+ volumes:
+ - redis_data:/data
+
+ spring-app-blue:
+ build: .
+ container_name: prod-blue
+ networks:
+ - production_network
+ ports:
+ - "8081:8080"
+ volumes:
+ - /home/ubuntu/app/log:/log
+ depends_on:
+ - redis
+
+ spring-app-green:
+ build: .
+ container_name: prod-green
+ networks:
+ - production_network
+ ports:
+ - "8082:8080"
+ volumes:
+ - /home/ubuntu/app/log:/log
+ depends_on:
+ - redis
+volumes:
+ redis_data:
\ No newline at end of file
diff --git a/scripts/deploy.sh b/scripts/deploy.sh
index 2dc5e6d1..d9335028 100644
--- a/scripts/deploy.sh
+++ b/scripts/deploy.sh
@@ -1,74 +1,122 @@
#!/bin/bash
-# 작업 디렉토리를 /home/ubuntu/app으로 변경
-cd /home/ubuntu/app
+DEPLOYMENT_ID=$DEPLOYMENT_ID
+# 배포 ID가 제공되지 않으면 오류를 출력하고 종료
+if [ -z "$DEPLOYMENT_ID" ]; then
+ echo "Deployment ID is not set. Please ensure the deployment ID is provided."
+ exit 1
+fi
+# 배포 그룹 이름 추출
+DEPLOYMENT_GROUP_NAME=$(aws deploy get-deployment --deployment-id $DEPLOYMENT_ID --query 'deploymentInfo.deploymentGroupName' --output text)
+echo $DEPLOYMENT_GROUP_NAME
-# 환경변수 DOCKER_APP_NAME을 spring으로 설정
-DOCKER_APP_NAME=spring
+# 만약 배포가 prod 라면
+if [ "$DEPLOYMENT_GROUP_NAME" = "meeteam-app" ]; then
+ # 작업 디렉토리를 /home/ubuntu/app/prod으로 변경
+ cd /home/ubuntu/app/prod
+ # 환경변수 DOCKER_APP_NAME을 spring-app으로 설정
+ DOCKER_APP_NAME=spring-app
-# 실행중인 blue가 있는지 확인
-# 프로젝트의 실행 중인 컨테이너를 확인하고, 해당 컨테이너가 실행 중인지 여부를 EXIST_BLUE 변수에 저장
-EXIST_BLUE=$(sudo docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.blue.yml ps | grep Up)
+ # 실행중인 blue가 있는지 확인
+ # 프로젝트의 실행 중인 컨테이너를 확인하고, 해당 컨테이너가 실행 중인지 여부를 EXIST_BLUE 변수에 저장
+ EXIST_REDIS=$(sudo docker ps --filter "name=^redis$" --filter "status=running" | grep Up)
+ EXIST_BLUE=$(sudo docker ps --filter "name=prod-blue" --filter "status=running"|grep Up)
-# 배포 시작한 날짜와 시간을 기록
-echo "배포 시작일자 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ # 배포 시작한 날짜와 시간을 기록
+ echo "배포 시작일자 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
-# green이 실행중이면 blue up
-# EXIST_BLUE 변수가 비어있는지 확인
-if [ -z "$EXIST_BLUE" ]; then
+ # green이 실행중이면 blue up
+ # EXIST_BLUE 변수가 비어있는지 확인
+ if [ -z "$EXIST_REDIS" ]; then
+ # 로그 파일(/home/ubuntu/deploy.log)에 "blue up - blue 배포 : port:8081"이라는 내용을 추가
+ echo "blue 배포 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
- # 로그 파일(/home/ubuntu/deploy.log)에 "blue up - blue 배포 : port:8081"이라는 내용을 추가
- echo "blue 배포 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ # docker-compose.prod.yml 파일을 사용하여 prod-blue, redis 서비스를 빌드하고 실행
+ sudo docker-compose -f docker-compose.prod.yml up redis ${DOCKER_APP_NAME}-blue -d --build
- # docker-compose.blue.yml 파일을 사용하여 spring-blue 프로젝트의 컨테이너를 빌드하고 실행
- sudo docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.blue.yml up -d --build
+ while [ 1 = 1 ]; do
+ echo ">>> spring blue health check ..."
+ sleep 3
+ REQUEST_SPRING=$(curl 127.0.0.1:8081/actuator/health)
+ if [ -n "$REQUEST_SPRING" ]; then
+ echo ">>> spring blue health check success !"
+ break;
+ fi
+ done;
- # 30초 동안 대기
- while [ 1 = 1 ]; do
- echo ">>> spring blue health check ..."
- sleep 3
- REQUEST_SPRING=$(curl 127.0.0.1:8081/actuator/health)
- if [ -n "$REQUEST_SPRING" ]; then
- echo ">>> spring blue health check success !"
- break;
- fi
- done;
+ elif [ -z "$EXIST_BLUE" ]; then
- # /home/ubuntu/deploy.log: 로그 파일에 "green 중단 시작"이라는 내용을 추가
- echo "green 중단 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ # 로그 파일(/home/ubuntu/deploy.log)에 "blue up - blue 배포 : port:8081"이라는 내용을 추가
+ echo "blue 배포 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
- # docker-compose.green.yml 파일을 사용하여 spring-green 프로젝트의 컨테이너를 중지
- sudo docker-compose -p ${DOCKER_APP_NAME}-green -f docker-compose.green.yml down
-
- # 사용하지 않는 이미지 삭제
- sudo docker image prune -af
-
- echo "green 중단 완료 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
-
-# blue가 실행중이면 green up
-else
- echo "green 배포 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
- sudo docker-compose -p ${DOCKER_APP_NAME}-green -f docker-compose.green.yml up -d --build
+ # docker-compose.prod.yml 파일을 사용하여 prod-blue 서비스를 빌드하고 실행
+ sudo docker-compose -f docker-compose.prod.yml up ${DOCKER_APP_NAME}-blue -d --build
while [ 1 = 1 ]; do
- echo ">>> spring green health check ..."
+ echo ">>> spring blue health check ..."
sleep 3
- REQUEST_SPRING=$(curl 127.0.0.1:8082/actuator/health)
+ REQUEST_SPRING=$(curl 127.0.0.1:8081/actuator/health)
if [ -n "$REQUEST_SPRING" ]; then
- echo ">>> spring green health check success !"
+ echo ">>> spring blue health check success !"
break;
fi
done;
- echo "blue 중단 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
- sudo docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.blue.yml down
- sudo docker image prune -af
+ # /home/ubuntu/deploy.log: 로그 파일에 "green 중단 시작"이라는 내용을 추가
+ echo "green 중단 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
- echo "blue 중단 완료 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ # docker-compose.prod.yml 파일을 사용하여 spring-app-green 서비스 중지
+ sudo docker-compose -f docker-compose.prod.yml down ${DOCKER_APP_NAME}-green
-fi
- echo "배포 종료 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ # 사용하지 않는 이미지 삭제
+ sudo docker image prune -af
+
+ echo "green 중단 완료 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
- echo "===================== 배포 완료 =====================" >> /home/ubuntu/deploy.log
- echo >> /home/ubuntu/deploy.log
\ No newline at end of file
+ # blue가 실행중이면 green up
+ else
+ echo "green 배포 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ sudo docker-compose -f docker-compose.prod.yml up ${DOCKER_APP_NAME}-green -d --build
+
+ while [ 1 = 1 ]; do
+ echo ">>> spring green health check ..."
+ sleep 3
+ REQUEST_SPRING=$(curl 127.0.0.1:8082/actuator/health)
+ if [ -n "$REQUEST_SPRING" ]; then
+ echo ">>> spring green health check success !"
+ break;
+ fi
+ done;
+
+ echo "blue 중단 시작 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+ # docker-compose.prod.yml 파일을 사용하여 spring-app-blue 서비스 중지
+ sudo docker-compose -f docker-compose.prod.yml down ${DOCKER_APP_NAME}-blue
+
+ sudo docker image prune -af
+
+ echo "blue 중단 완료 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+
+ fi
+ echo "배포 종료 : $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)" >> /home/ubuntu/deploy.log
+
+ echo "===================== 배포 완료 =====================" >> /home/ubuntu/deploy.log
+ echo >> /home/ubuntu/deploy.log
+#만약 배포가 개발이라면
+else
+ cd /home/ubuntu/app/dev
+ # 현재 실행 중인 컨테이너를 중지하고 제거합니다
+ docker-compose -f docker-compose.dev.yml down
+ # 새 이미지를 빌드하고 컨테이너를 백그라운드에서 실행합니다
+ docker-compose -f docker-compose.dev.yml up -d --build
+ while [ 1 = 1 ]; do
+ echo ">>> spring green health check ..."
+ sleep 3
+ REQUEST_SPRING=$(curl 127.0.0.1:1821/actuator/health)
+ if [ -n "$REQUEST_SPRING" ]; then
+ echo ">>> spring green health check success !"
+ break;
+ fi
+ done;
+ sudo docker image prune -af
+fi
\ No newline at end of file
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index 08c6f36c..7494e249 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -4,7 +4,7 @@
value="[%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %green([%thread]) %highlight(%-5level) %boldWhite([%C.%M:%yellow(%L)]) - %msg%n"/>
-
+
@@ -19,7 +19,13 @@
+
+
+
+
+
+