refactor: fixed CICD setup #3
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: Deploy To EC2 | |
| on: | |
| push: | |
| branches: | |
| - "feat/#49-cicd-setup" | |
| jobs: | |
| Deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Github Repository 파일 불러오기 | |
| uses: actions/checkout@v4 | |
| - name: JDK 21버전 설치 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 21 | |
| - name: application.yml (통합본) 파일 생성 | |
| run: | | |
| mkdir -p ./src/main/resources | |
| # 통합된 yml 하나만 생성합니다. local.yml 생성 단계는 삭제했습니다. | |
| echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml | |
| - name: 빌드하기 (테스트 제외) | |
| # RDS 보안 그룹 설정 등에 따라 빌드 중 DB 접속 테스트가 실패할 수 있으므로 | |
| # 안정적인 배포를 위해 -x test를 권장합니다. | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean build -x test | |
| - name: AWS credentials 인증 설정 | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-region: ap-northeast-2 | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| - name: ECR에 로그인 | |
| id: login-ecr | |
| uses: aws-actions/amazon-ecr-login@v2 | |
| - name: Docker 이미지 생성 및 Push | |
| run: | | |
| docker build -t remu-server . | |
| docker tag remu-server ${{ steps.login-ecr.outputs.registry }}/remu-server:latest | |
| docker push ${{ steps.login-ecr.outputs.registry }}/remu-server:latest | |
| - name: SSH로 EC2에 접속 및 배포 실행 | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USERNAME }} | |
| key: ${{ secrets.EC2_PRIVATE_KEY }} | |
| script_stop: true | |
| # [핵심] SSH 환경으로 GitHub Secrets 변수들을 넘겨줍니다. | |
| envs: ECR_REGISTRY,DB_URL,DB_USER,DB_PW,GEMINI_API_KEY,GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRET,JWT_SECRET,BASE_URL,GOOGLE_API_KEY | |
| env: | |
| ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} | |
| DB_URL: ${{ secrets.DB_URL }} | |
| DB_USER: ${{ secrets.DB_USER }} | |
| DB_PW: ${{ secrets.DB_PW }} | |
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_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 }} | |
| JWT_SECRET: ${{ secrets.JWT_SECRET }} | |
| BASE_URL: ${{ secrets.BASE_URL }} | |
| GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} | |
| script: | | |
| # EC2 내 도커가 ECR에서 이미지를 당겨올 수 있도록 로그인 | |
| aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin $ECR_REGISTRY | |
| # 기존 컨테이너 정리 | |
| docker stop remu-server || true | |
| docker rm remu-server || true | |
| # 새 이미지 pull | |
| docker pull $ECR_REGISTRY/remu-server:latest | |
| # [핵심] RDS 및 환경변수 주입하며 실행 | |
| docker run -d --name remu-server -p 8080:8080 \ | |
| -e DB_URL=$DB_URL \ | |
| -e DB_USER=$DB_USER \ | |
| -e DB_PW=$DB_PW \ | |
| -e GEMINI_API_KEY=$GEMINI_API_KEY \ | |
| -e GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID \ | |
| -e GOOGLE_CLIENT_SECRET=$GOOGLE_CLIENT_SECRET \ | |
| -e KAKAO_CLIENT_ID=$KAKAO_CLIENT_ID \ | |
| -e KAKAO_CLIENT_SECRET=$KAKAO_CLIENT_SECRET \ | |
| -e JWT_SECRET=$JWT_SECRET \ | |
| -e BASE_URL=$BASE_URL \ | |
| -e GOOGLE_API_KEY=$GOOGLE_API_KEY \ | |
| $ECR_REGISTRY/remu-server:latest |