Skip to content

Feat: traceId 기반 요청 및 repository 성능 로그 로깅 추가 #15

Feat: traceId 기반 요청 및 repository 성능 로그 로깅 추가

Feat: traceId 기반 요청 및 repository 성능 로그 로깅 추가 #15

Workflow file for this run

name: Auto Deploy
on:
push:
branches:
- dev-server
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 0. 작업 시작 시 실패 정보를 기록할 파일 초기화
- name: Initialize failure log
run: echo "Deployment started" > $GITHUB_WORKSPACE/failure.log
# 1. 저장소 체크아웃
- name: Checkout Repository
uses: actions/checkout@v3
# 2. JDK 17 환경 설정 (Jenkins 파일의 'OpenJDK-17.0.13'과 동일)
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17.0.13'
# 3-2. 경로 만들기 및 json 파일 넣기
- name: Setup Application Configuration Files
run: |
chmod -R 777 back/photorize/src/main/resources
mkdir -p back/photorize/src/main/resources/firebase
# 3-1. firebase json 만들기
- name: create-json
id: create-json
uses: jsdaniell/create-json@v1.2.3
with:
name: "photorize-firebase-adminsdk-vx10f-50340d63d9.json"
json: ${{ secrets.BACKEND_FIREBASE_FILE }}
dir: 'back/photorize/src/main/resources/firebase/'
# 4. Spring Boot 애플리케이션 빌드 (Gradle)
- name: Build Spring Boot Application
working-directory: back/photorize
run: |
chmod +x ./gradlew
# ./gradlew clean build -x test 2>&1 | tee -a $GITHUB_WORKSPACE/failure.log
# 디버깅 단계 추가
- name: Verify FCM Config File
run: cat back/photorize/src/main/resources/firebase/photorize-firebase-adminsdk-vx10f-50340d63d9.json
# 5. Docker 이미지 빌드 (Dockerfile은 back/photorize/ 내에 존재한다고 가정)
- name: Build Docker Image
working-directory: back/photorize
run: |
docker build -t yangshutter/photorize-server:2.0.0 -f Dockerfile . 2>&1 | tee -a $GITHUB_WORKSPACE/failure.log
# 6. Docker Hub 로그인 (Docker Hub 자격증명을 secrets에 등록)
- name: Docker Hub Login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# 7. Docker 이미지 푸시
- name: Push Docker Image
run: docker push yangshutter/photorize-server:2.0.0 2>&1 | tee -a $GITHUB_WORKSPACE/failure.log
# 8. EC2에 배포 (SSH 액션을 이용)
- name: Deploy to EC2
uses: appleboy/ssh-action@v0.1.8
with:
host: ${{ secrets.EC2_HOST }}
username: ubuntu
key: ${{ secrets.EC2_KEY }}
script: |
docker pull yangshutter/photorize-server:2.0.0
docker stop photorize-server || true
docker rm photorize-server || true
docker run -d --name photorize-server --network photorize-network -p 8080:8080 \
-e "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" \
-e "DB_URL=${{ secrets.DB_URL }}" \
-e "DB_USERNAME=${{ secrets.DB_USERNAME }}" \
-e "FCM_CERTIFICATION_FILE_PATH=${{ secrets.FCM_CERTIFICATION_FILE_PATH }}" \
-e "JWT_ACCESS_TIME=${{ secrets.JWT_ACCESS_TIME }}" \
-e "JWT_REFRESH_TIME=${{ secrets.JWT_REFRESH_TIME }}" \
-e "JWT_SECRET=${{ secrets.JWT_SECRET }}" \
-e "MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }}" \
-e "S3_ACCESS_KEY=${{ secrets.S3_ACCESS_KEY }}" \
-e "S3_BASE_URL=${{ secrets.S3_BASE_URL }}" \
-e "S3_BUCKET_NAME=${{ secrets.S3_BUCKET_NAME }}" \
-e "S3_SECRET_KEY=${{ secrets.S3_SECRET_KEY }}" \
-e "REDIS_HOST=${{ secrets.REDIS_HOST }}" \
-e "CLIENT_ID=${{ secrets.CLIENT_ID }}" \
-e "CLIENT_SECRET=${{ secrets.CLIENT_SECRET }}" \
yangshutter/photorize-server:2.0.0
# 9. 배포 후 알림 전송 등 추가 단계 가능
- name: Notify Discord
if: always()
run: |
JOB_NUMBER="${{ github.run_number }}"
JOB_STATUS="${{ job.status }}"
BRANCH="${{ github.ref_name }}"
FAIL_LOG=$(cat $GITHUB_WORKSPACE/failure.log)
if [ "$JOB_STATUS" = "success" ]; then
MESSAGE=$'**[Deploy] - #'${JOB_NUMBER}'**\n✅ **빌드 및 배포 완료**!\nBranch: **'${BRANCH}'**\nJob Status: '${JOB_STATUS}
else
MESSAGE=$'**[Deploy] - #'${JOB_NUMBER}'**\n❌ **배포 실패**!\nBranch: **'${BRANCH}'**\nJob Status: '${JOB_STATUS}'\nFailure log:\n**'${FAIL_LOG}'**'
fi
PAYLOAD=$(jq -c -n --arg content "$MESSAGE" '{content: $content}')
echo "Payload: $PAYLOAD" # 디버깅용 출력
curl -X POST \
-H "Content-Type: application/json" \
-d "$PAYLOAD" \
${{ secrets.DISCORD_WEBHOOK_URL }}