Merge pull request #264 from PharmQuest/dev #84
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 | |
| on: | |
| push: | |
| branches: [ main ] # main 브랜치에 push 발생 시 실행 | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 # 코드 체크아웃 | |
| - name: Set up JDK 17 # Java 설정 | |
| uses: actions/setup-java@v3 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Delete Gradle Cache # Gradle 캐시 삭제 | |
| run: rm -rf ~/.gradle/caches ~/.gradle/wrapper | |
| - name: Ensure resources directory exists | |
| run: mkdir -p ./src/main/resources | |
| - name: Make application.yml # application.yml 설정 | |
| run: | | |
| echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml | |
| shell: bash | |
| - name: Grant execute permission for gradlew # Gradle 실행 권한 부여 | |
| run: chmod +x gradlew | |
| - name: Build with Gradle # Gradle 빌드 실행 | |
| uses: gradle/gradle-build-action@v2 | |
| with: | |
| arguments: build --stacktrace | |
| cache-disabled: true # Gradle 캐시 비활성화 | |
| - name: Upload build artifact # 빌드된 JAR 파일 업로드 | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: umc7thServer | |
| path: build/libs/*.jar | |
| deploy: | |
| needs: build # build 완료 후 실행 | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download build artifact # JAR 다운로드 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: umc7thServer | |
| path: build/libs/ | |
| - name: Deploy to EC2 # EC2 배포 | |
| env: | |
| EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} | |
| EC2_USERNAME: ${{ secrets.EC2_USERNAME }} | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| APP_NAME: "umc7thServer" # 애플리케이션 이름 | |
| run: | | |
| echo "$EC2_SSH_KEY" > private_key.pem | |
| chmod 600 private_key.pem | |
| jar_file=$(find build/libs -name '*.jar' ! -name '*plain.jar' | head -n 1) | |
| echo " Deploying JAR to EC2..." | |
| # EC2 접속 및 기존 애플리케이션 종료 | |
| ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST << EOF | |
| echo " Stopping existing application..." | |
| PID=\$(pgrep -f $APP_NAME.jar) | |
| if [ -n "\$PID" ]; then | |
| echo "Found running process: \$PID, stopping..." | |
| kill -15 \$PID | |
| sleep 5 | |
| else | |
| echo "No running process found." | |
| fi | |
| EOF | |
| # JAR 업로드 | |
| echo " Uploading new JAR..." | |
| scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/$APP_NAME.jar | |
| # 새 애플리케이션 실행 | |
| ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST << EOF | |
| echo " Starting new application..." | |
| nohup java -jar /home/$EC2_USERNAME/$APP_NAME.jar > /home/$EC2_USERNAME/app.log 2>&1 & | |
| echo " Deployment completed!" | |
| EOF | |
| # 보안 키 삭제 | |
| rm -f private_key.pem |