[feat] 여행 일정 생성 요청 DTO 수정 #7
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 # 메인 브랜치 푸시 시 실행 | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| services: | |
| mysql: | |
| image: mysql:8.0 | |
| ports: | |
| - 3306:3306 | |
| env: | |
| MYSQL_ROOT_PASSWORD: root | |
| MYSQL_DATABASE: test_database | |
| MYSQL_USER: test_user | |
| MYSQL_PASSWORD: test_password | |
| steps: | |
| # 1. 소스코드 체크아웃 | |
| - name: Checkout code | |
| uses: actions/checkout@v2 | |
| # 2. JDK 설정 (Java 17 설치) | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| # 3. Gradle 빌드 | |
| - name: Build application | |
| env: | |
| APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }} | |
| TEST_APPLICATION_PROPERTIES: ${{ secrets.TEST_APPLICATION_PROPERTIES }} | |
| run: | | |
| # src/main/resources 및 src/test/resources 디렉토리 생성 | |
| mkdir -p src/main/resources src/test/resources | |
| # application.properties 파일 생성 | |
| echo "$APPLICATION_PROPERTIES" > src/main/resources/application.properties | |
| echo "$TEST_APPLICATION_PROPERTIES" > src/test/resources/application.properties | |
| # 권한 설정 | |
| chmod 600 src/main/resources/application.properties | |
| chmod 600 src/test/resources/application.properties | |
| # gradlew 실행 권한 부여 | |
| chmod +x ./gradlew | |
| # Gradle 빌드 실행 | |
| ./gradlew clean build | |
| # JAR 파일 위치 확인 | |
| echo "JAR file generated in:" | |
| ls build/libs/ | |
| # 빌드 성공 후 application.properties 삭제 | |
| rm -f src/main/resources/application.properties | |
| rm -f src/test/resources/application.properties | |
| # 빌드된 JAR 파일을 Docker 빌드 컨텍스트로 복사 | |
| cp build/libs/*SNAPSHOT.jar . | |
| # 4. Docker 이미지 빌드 및 푸시 | |
| - name: Build and Push Docker Image | |
| env: | |
| DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| run: | | |
| echo "Building Docker Image..." | |
| # Docker 이미지 빌드 | |
| docker build -t teniuscom/plango-backend:latest . | |
| # Docker 이미지 확인 (빌드된 이미지 확인) | |
| docker images | |
| # Docker Hub 로그인 | |
| echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin | |
| # 태그 확인 및 푸시 | |
| docker push teniuscom/plango-backend:latest | |
| # 5. docker-compose.yml 및 환경 파일 EC2로 전송 | |
| - name: Upload Docker Compose to EC2 | |
| env: | |
| EC2_PRIVATE_KEY: ${{ secrets.EC2_PRIVATE_KEY }} | |
| EC2_USER: ${{ secrets.EC2_USER }} | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }} | |
| MYSQL_USER: ${{ secrets.MYSQL_USER }} | |
| MYSQL_PASSWORD: ${{ secrets.MYSQL_PASSWORD }} | |
| run: | | |
| echo "${{ secrets.EC2_PRIVATE_KEY }}" > private_key.pem | |
| chmod 600 private_key.pem | |
| # 환경 변수 파일 생성 | |
| echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" > .env | |
| echo "MYSQL_USER=${MYSQL_USER}" >> .env | |
| echo "MYSQL_PASSWORD=${MYSQL_PASSWORD}" >> .env | |
| # Docker Compose 및 .env 파일 전송 | |
| scp -i private_key.pem -o StrictHostKeyChecking=no docker-compose.yml $EC2_USER@$EC2_HOST:/home/ubuntu/plango | |
| scp -i private_key.pem -o StrictHostKeyChecking=no .env $EC2_USER@$EC2_HOST:/home/ubuntu/plango | |
| # 6. EC2에서 Docker Compose 실행 | |
| - name: Deploy on EC2 | |
| env: | |
| EC2_PRIVATE_KEY: ${{ secrets.EC2_PRIVATE_KEY }} | |
| EC2_USER: ${{ secrets.EC2_USER }} | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| run: | | |
| # EC2 key pair 준비 | |
| echo "${{ secrets.EC2_PRIVATE_KEY }}" > private_key.pem | |
| chmod 600 private_key.pem | |
| # SSH로 EC2 접속 및 Docker Compose 실행 | |
| ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST << EOF | |
| cd /home/ubuntu/plango | |
| # Docker 서비스 상태 확인 및 실행 | |
| if ! systemctl is-active --quiet docker; then | |
| echo "Docker service is not running. Starting Docker..." | |
| sudo systemctl start docker | |
| else | |
| echo "Docker service is already running." | |
| fi | |
| # Docker Hub 로그인 | |
| echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin | |
| # Docker 이미지 Pull | |
| docker-compose pull | |
| # 기존 컨테이너 중지 및 삭제 | |
| docker-compose down || true | |
| # 새 컨테이너 실행 | |
| docker-compose up -d | |
| echo "Application deployed successfully!" | |
| EOF |