refactor: 오류 로그해결 #289
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |