diff --git a/.github/workflows/deploy.yml b/.github/workflows/cd.yml similarity index 76% rename from .github/workflows/deploy.yml rename to .github/workflows/cd.yml index 66424d3f..9c478e18 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/cd.yml @@ -2,17 +2,38 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: push: - branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] + branches: [ "main", "develop" ] permissions: contents: read jobs: - CI-CD: - name: CI/CD + build: + name: Build runs-on: ubuntu-latest + services: + mysql: + image: mysql:8.0 + env: + MYSQL_DATABASE: eatssu_test + MYSQL_ROOT_PASSWORD: test + ports: + - 3306:3306 + options: >- + --health-cmd="mysqladmin ping -h localhost" + --health-interval=10s + --health-timeout=5s + --health-retries=10 + env: + EATSSU_DB_URL_TEST: jdbc:mysql://localhost:3306/eatssu_test + EATSSU_DB_USERNAME: root + EATSSU_DB_PASSWORD: test + EATSSU_AWS_ACCESS_KEY_DEV: dummy-access-key + EATSSU_AWS_SECRET_KEY_DEV: dummy-secret-key + EATSSU_SLACK_TOKEN: dummy-slack-token steps: - uses: actions/checkout@v3 + - name: JDK 17 설치 uses: actions/setup-java@v3 with: @@ -30,7 +51,7 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' run: | echo "spring: profiles: @@ -38,7 +59,7 @@ jobs: shell: bash - name: prod 프로필 설정 - if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' + if: github.ref_name == 'main' run: | echo "spring: profiles: @@ -48,12 +69,34 @@ jobs: - name: gradlew 실행 권한 부여 run: chmod +x gradlew + - name: 테스트용 JWT 시크릿 생성 + run: echo "EATSSU_JWT_SECRET_TEST=$(openssl rand -base64 64 | tr -d '\n')" >> "$GITHUB_ENV" + - name: Gradle로 빌드 - run: ./gradlew build -x test --no-daemon + run: ./gradlew build --no-daemon - name: 빌드 산출물 확인 run: ls -lh build/libs/*.jar + - name: 빌드 산출물 업로드 + uses: actions/upload-artifact@v4 + with: + name: app-jar + path: build/libs/eat-ssu.jar + + deploy: + name: Deploy + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: 빌드 산출물 다운로드 + uses: actions/download-artifact@v4 + with: + name: app-jar + path: build/libs + - name: Docker Hub 로그인 uses: docker/login-action@v2 with: @@ -61,13 +104,13 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} - name: prod 용 Docker 빌드 및 푸시 - if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' + if: github.ref_name == 'main' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev @@ -75,7 +118,7 @@ jobs: - name: prod에 배포 uses: appleboy/ssh-action@master id: deploy-prod - if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' + if: github.ref_name == 'main' with: host: ${{ secrets.HOST_PROD }} username: ${{ secrets.USERNAME }} @@ -106,7 +149,7 @@ jobs: - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} diff --git a/CLAUDE.md b/CLAUDE.md index 2815a4b4..5d78c7ab 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -80,7 +80,7 @@ src/main/java/ssu/eatssu/ ### 배포 -GitHub Actions(`deploy.yml`)로 Docker 이미지를 빌드하여 EC2에 SSH 배포한다. `prod`/`dev` 브랜치에 따라 배포 환경이 분기된다. +GitHub Actions(`cd.yml`)로 Docker 이미지를 빌드하여 EC2에 SSH 배포한다. `prod`/`dev` 브랜치에 따라 배포 환경이 분기된다. ## Commit Convention