[Refactor] 크로스 도메인 수정 #76
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: [ main, develop ] | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| env: | |
| EC2_USER: ubuntu | |
| EC2_KEY: ${{ secrets.EC2_KEY }} | |
| EC2_MAIN_HOST: ${{ secrets.EC2_MAIN_HOST }} | |
| EC2_DEV_HOST: ${{ secrets.EC2_DEV_HOST }} | |
| APPLICATION_YML_PROD: ${{ secrets.APPLICATION_YML_PROD }} | |
| APPLICATION_YML_DEV: ${{ secrets.APPLICATION_YML_DEV }} | |
| steps: | |
| - name: Checkout source | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' # 또는 사용하는 Java 버전으로 변경 | |
| distribution: 'temurin' | |
| - name: Cache Gradle packages | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Make gradlew executable | |
| run: chmod +x ./gradlew | |
| - name: Test build locally first | |
| run: ./gradlew clean build -x test --no-daemon --refresh-dependencies | |
| - name: Set deployment variables | |
| id: vars | |
| run: | | |
| if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then | |
| echo "HOST=${EC2_MAIN_HOST}" >> "$GITHUB_ENV" | |
| echo "DOCKER_YML=docker-compose.prod.yml" >> "$GITHUB_ENV" | |
| echo "${APPLICATION_YML_PROD}" > yml.txt | |
| else | |
| echo "HOST=${EC2_DEV_HOST}" >> "$GITHUB_ENV" | |
| echo "DOCKER_YML=docker-compose.dev.yml" >> "$GITHUB_ENV" | |
| echo "${APPLICATION_YML_DEV}" > yml.txt | |
| fi | |
| - name: Create PEM file | |
| run: | | |
| echo "$EC2_KEY" | base64 -d > ec2-key.pem | |
| chmod 600 ec2-key.pem | |
| - name: Send code and application.yml.b64 to EC2 | |
| run: | | |
| rsync -av --exclude='.git' --exclude='.gradle' --exclude='build' --delete -e "ssh -i ec2-key.pem -o StrictHostKeyChecking=no" ./ $EC2_USER@$HOST:/home/ubuntu/app/ | |
| scp -i ec2-key.pem -o StrictHostKeyChecking=no yml.txt $EC2_USER@$HOST:/home/ubuntu/app/application.yml.b64 | |
| - name: Build and restart container on EC2 | |
| run: | | |
| ssh -i ec2-key.pem -o StrictHostKeyChecking=no $EC2_USER@$HOST << EOF | |
| set -e | |
| cd /home/ubuntu/app | |
| # 전송된 파일들 확인 | |
| echo "=== 전송된 파일 목록 확인 ===" | |
| find src -name "*HallResponse*" || echo "HallResponse 파일 없음" | |
| ls -la src/main/java/spring/encorely/dto/ || echo "dto 폴더 없음" | |
| # Git 상태 확인 | |
| echo "=== Git 브랜치 확인 ===" | |
| git branch -a || echo "Git 정보 없음" | |
| git log --oneline -3 || echo "Git 로그 없음" | |
| mkdir -p src/main/resources | |
| base64 -d application.yml.b64 > src/main/resources/application.yml | |
| chmod +x ./gradlew | |
| # 빌드 시도 | |
| ./gradlew clean build -x test --no-daemon --refresh-dependencies || { | |
| echo "=== 빌드 실패 시 상세 정보 ===" | |
| echo "현재 디렉토리: \$(pwd)" | |
| echo "Java 버전: \$(java -version)" | |
| ls -la | |
| exit 1 | |
| } | |
| docker-compose -f /home/ubuntu/app/$DOCKER_YML down | |
| docker-compose -f /home/ubuntu/app/$DOCKER_YML up --build -d | |
| EOF |