Skip to content

refactor: 오류 로그해결 #289

refactor: 오류 로그해결

refactor: 오류 로그해결 #289

Workflow file for this run

name: CI/CD Pipeline to EC2 with Blue/Green
on:
push:
branches: [main, dev, ci/env]
# ───────────────────────────────────────────────────────────────
concurrency:
group: deploy-to-ec2
cancel-in-progress: true
# ───────────────────────────────────────────────────────────────
env:
PROJECT_NAME: aibe1_finalproject_lastdance_be
AWS_REGION: ap-northeast-2
# ───────────────────────────────────────────────────────────────
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. Checkout
- uses: actions/checkout@v4
name: Checkout Source Code
# 2. JDK
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
# 3. gradlew 실행 권한
- run: chmod +x gradlew
name: Grant execute permission for gradlew
# 4. Build (테스트 제외)
- run: ./gradlew clean build -x test
name: Build Spring Boot Application
# 5. GHCR 로그인
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_TOKEN }}
# 6. Docker 메타데이터 추출
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository_owner }}/${{ env.PROJECT_NAME }}
tags: |
type=ref,event=branch
type=sha,prefix=
type=raw,value=latest,enable={{is_default_branch}}
# 7. Docker 이미지 빌드 & 푸시
- name: Build and Push Docker image
id: build-image
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# 8-A. 파일 전송 (SCP)
- name: DEBUG – verify workspace paths
run: |
echo "root listing"; ls -al
ls -al docker || true
ls -al deploy.sh || true
ls -al monitoring || true
- name: Copy deploy assets to EC2
uses: appleboy/scp-action@v0.1.6
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "docker,deploy.sh,monitoring"
target: /home/ubuntu/${{ env.PROJECT_NAME }}
debug: true
# 8-B. 원격 배포 (SSH)
- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.0
env:
GHCR_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/${{ env.PROJECT_NAME }}
IMAGE_TAG: ${{ steps.meta.outputs.version }}
GHCR_USER: ${{ github.repository_owner }}
GHCR_TOKEN: ${{ secrets.GHCR_TOKEN }}
AWS_REGION: ${{ env.AWS_REGION }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_S3_BUCKET_NAME: ${{ secrets.AWS_S3_BUCKET_NAME }}
DB_URL: ${{ secrets.DB_URL }}
DB_USERNAME: ${{ secrets.DB_USERNAME }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
JWT_SECRET_KEY: ${{ secrets.JWT_SECRET_KEY }}
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
KAKAO_CLIENT_ID: ${{ secrets.KAKAO_CLIENT_ID }}
KAKAO_CLIENT_SECRET: ${{ secrets.KAKAO_CLIENT_SECRET }}
NAVER_CLIENT_ID: ${{ secrets.NAVER_CLIENT_ID }}
NAVER_CLIENT_SECRET: ${{ secrets.NAVER_CLIENT_SECRET }}
GRAFANA_ADMIN_PASSWORD: ${{ secrets.GRAFANA_ADMIN_PASSWORD }}
GOOGLE_GEMINI_KEY: ${{ secrets.GOOGLE_GEMINI_KEY }}
REDIS_HOST: ${{ secrets.REDIS_HOST }}
REDIS_PORT: ${{ secrets.REDIS_PORT }}
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
GOOGLE_EMAIL: ${{ secrets.GOOGLE_EMAIL }}
GOOGLE_MAIL_PASSWORD: ${{ secrets.GOOGLE_MAIL_PASSWORD }}
GOOGLE_NAME: ${{ secrets.GOOGLE_NAME }}
NAVER_EMAIL: ${{ secrets.NAVER_EMAIL }}
NAVER_MAIL_PASSWORD: ${{ secrets.NAVER_MAIL_PASSWORD }}
NAVER_NAME: ${{ secrets.NAVER_NAME }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
YOUTH_API_KEY: ${{ secrets.YOUTH_API_KEY }}
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script_stop: true
envs: >
GHCR_IMAGE_NAME,IMAGE_TAG,GHCR_USER,GHCR_TOKEN,
AWS_REGION,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_S3_BUCKET_NAME,
DB_URL,DB_USERNAME,DB_PASSWORD,JWT_SECRET_KEY,
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,
KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRET,
NAVER_CLIENT_ID,NAVER_CLIENT_SECRET,
GRAFANA_ADMIN_PASSWORD,
GOOGLE_GEMINI_KEY,
REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,
GOOGLE_EMAIL,GOOGLE_MAIL_PASSWORD,GOOGLE_NAME,
NAVER_EMAIL,NAVER_MAIL_PASSWORD,NAVER_NAME,
SLACK_WEBHOOK_URL,
YOUTH_API_KEY
script: |
set -eu
cd /home/ubuntu/${{ env.PROJECT_NAME }}
chmod +x deploy.sh
./deploy.sh