diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml index 8af4ef8..0bd4707 100644 --- a/.github/workflows/dev_deploy.yml +++ b/.github/workflows/dev_deploy.yml @@ -1,54 +1,60 @@ name: UMC Dev CI/CD + on: pull_request: - branches: [ develop ] # develop 브랜치에 pr이 일어날 때 실행 - types: [closed] # 해당 pr이 닫혔을 때만 실행되도록 설정 - workflow_dispatch: # (2).수동 실행도 가능하도록 + branches: [ develop ] + types: [closed] + workflow_dispatch: jobs: build: - runs-on: ubuntu-latest # (3).OS환경 - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' # 닫힌 pr이 성공적으로 합쳐졌을 때, 그리고 base ref가 develop일 때만 되도록 설정 + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' steps: - - uses: actions/checkout@v3 # 저장소 코드 체크아웃 - - name: Set up JDK 21 # Java 개발 킷 설정 - uses: actions/setup-java@v3 + # [중요] 코드를 체크아웃해야 빌드를 할 수 있습니다. (v4로 업데이트) + - name: Checkout Source Code + uses: actions/checkout@v4 + - name: Set up JDK 21 + uses: actions/setup-java@v4 # v4로 업데이트 권장 with: distribution: 'temurin' java-version: '21' - - - name: Make application-dev.yml # application-dev.yml 파일 생성 + - name: Make application-dev.yml run: | cd ./src/main/resources echo "${{ secrets.APPLICATION_DEV_YML }}" > ./application-dev.yml shell: bash - - name: Grant execute permission for gradlew # gradlew 실행 권한 부여 + - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle # Gradle을 사용하여 프로젝트 빌드 - uses: gradle/gradle-build-action@v2 + # Gradle 빌드 액션도 최신 버전으로 변경 권장 + - name: Build with Gradle + uses: gradle/gradle-build-action@v3 with: - arguments: build + arguments: build -x test # 테스트 코드가 없다면 -x test로 스킵하여 속도 향상 - - name: Upload build artifact # 빌드된 아티팩트 업로드 - uses: actions/upload-artifact@v3 + # [에러 해결] v3 -> v4로 변경 + - name: Upload build artifact + uses: actions/upload-artifact@v4 with: name: umc9thServer path: build/libs/*.jar + deploy: - needs: build # build 작업이 성공적으로 완료된 후 실행 + needs: build runs-on: ubuntu-latest steps: - - name: Download build artifact # 이전 단계에서 업로드한 아티팩트 다운로드 - uses: actions/download-artifact@v3 + # [에러 해결] v3 -> v4로 변경 + - name: Download build artifact + uses: actions/download-artifact@v4 with: name: umc9thServer path: build/libs/ - - name: Deploy to EC2 # EC2에 배포 + - name: Deploy to EC2 env: EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} EC2_USERNAME: ${{ secrets.EC2_USERNAME }} @@ -56,11 +62,18 @@ jobs: run: | echo "$EC2_SSH_KEY" > private_key.pem chmod 600 private_key.pem + + # jar 파일 찾기 jar_file=$(find build/libs -name '*.jar' ! -name '*plain.jar' | head -n 1) + + # EC2로 파일 전송 (S3 없이 직접 전송) scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/umc7thServer.jar + + # EC2 접속 및 실행 ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST " - pgrep java | xargs -r kill -15 # 기존에 실행 중인 Java 프로세스 종료 - sleep 10 - nohup java -jar /home/$EC2_USERNAME/umc7thServer.jar > app.log 2>&1 & # 새 버전 애플리케이션 실행 + pgrep java | xargs -r kill -15 + sleep 5 + # [중요] -Dspring.profiles.active=dev 옵션 추가 (dev 설정 파일 적용) + nohup java -jar -Dspring.profiles.active=dev /home/$EC2_USERNAME/umc7thServer.jar > app.log 2>&1 & " - rm -f private_key.pem # 민감한 정보 삭제 \ No newline at end of file + rm -f private_key.pem \ No newline at end of file