π dev_deploy.yml λλ²κΉ #97
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: [ dev ] # dev λΈλμΉλ‘ νΈμν λλ§λ€ μ€ν | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 # μ μ₯μ μ½λ 체ν¬μμ | |
| - name: Set up JDK 17 # Java κ°λ° ν· μ€μ | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| # application.ymlμ μμ νκ² μμ± (λ³μ μ¬νμ₯/λ§μ€νΉ μ΄μ λ°©μ§) | |
| - name: Make application.yml | |
| env: | |
| APP_YML: ${{ secrets.APPLICATION_YML }} # GitHub Actions secretμ μ μ₯λ μ 체 YAML λ΄μ© | |
| shell: bash | |
| run: | | |
| mkdir -p ./src/main/resources | |
| # λ΄μ© κ·Έλλ‘ μ°κΈ° (μμ΄ ${...}λ₯Ό λ€μ νμ₯νμ§ μλλ‘) | |
| printf '%s' "$APP_YML" > ./src/main/resources/application.yml | |
| # λΉμ΄μμΌλ©΄ μ€ν¨ μ²λ¦¬ | |
| test -s ./src/main/resources/application.yml || (echo "application.yml is empty" && exit 1) | |
| - name: Grant execute permission for gradlew # gradlew μ€ν κΆν λΆμ¬ | |
| run: chmod +x gradlew | |
| - name: Build with Gradle # Gradleμ μ¬μ©νμ¬ νλ‘μ νΈ λΉλ | |
| uses: gradle/gradle-build-action@v3 | |
| with: | |
| arguments: clean build -x test | |
| - name: Upload build artifact # λΉλλ μν°ν©νΈ μ λ‘λ | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: serverTest | |
| path: build/libs/*.jar | |
| deploy: | |
| needs: build # build μμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λ ν μ€ν | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Download build artifact # μ΄μ λ¨κ³μμ μ λ‘λν μν°ν©νΈ λ€μ΄λ‘λ | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: serverTest | |
| 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 }} | |
| FCM_SERVICE_ACCOUNT_JSON: ${{ secrets.FCM_SERVICE_ACCOUNT_JSON }} # μλ‘ μΆκ°λ μν¬λ¦Ώ | |
| shell: bash | |
| run: | | |
| # SSH ν€ μ€λΉ | |
| 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) | |
| jar_name=$(basename "$jar_file") | |
| # FCM JSONμ λ‘컬 μμ νμΌλ‘ μ μ₯ (κ°ν/λ°μ΄ν μμ ) | |
| printf '%s' "$FCM_SERVICE_ACCOUNT_JSON" > fcm.json | |
| # JAR + fcm.json μ μ‘ | |
| scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" fcm.json \ | |
| "$EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/" | |
| # μ격 μ€ν | |
| ssh -i private_key.pem -o StrictHostKeyChecking=no "$EC2_USERNAME@$EC2_HOST" " | |
| # κΈ°μ‘΄ μ± μ’ λ£ | |
| pgrep java | xargs -r kill -15 | |
| sleep 10 | |
| # Springμ΄ μ½μ νκ²½λ³μλ‘ FCM JSON μ£Όμ | |
| export FCM_SERVICE_ACCOUNT_JSON=\"\$(cat /home/$EC2_USERNAME/fcm.json)\" | |
| # μ ν리μΌμ΄μ μ€ν | |
| nohup java -jar /home/$EC2_USERNAME/$jar_name > app.log 2>&1 & | |
| # λ―Όκ° νμΌ μ¦μ μμ | |
| rm -f /home/$EC2_USERNAME/fcm.json | |
| " | |
| # λ‘컬 μμνμΌ μ 리 | |
| rm -f private_key.pem fcm.json |