Skip to content

πŸ› dev_deploy.yml 디버깅 #97

πŸ› dev_deploy.yml 디버깅

πŸ› dev_deploy.yml 디버깅 #97

Workflow file for this run

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