diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 0000000..a724c22 --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,78 @@ +name: Java CI with Gradle + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + name: Build & Push Docker Image + runs-on: ubuntu-latest + + steps: + # Checkout + - name: Checkout Code + uses: actions/checkout@v4 + + # JDK + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + # Gradle cache + - name: Setup Gradle Cache + uses: gradle/actions/setup-gradle@v4 + + # Gradle build + - name: Build with Gradle + run: ./gradlew clean build -x test + + # DockerHub Login + - name: DockerHub Login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + # Docker build + - name: Build Docker Image + run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test . + + # Docker push + - name: Push Docker Image + run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test + + deploy: + name: Deploy to EC2 + needs: build + runs-on: ubuntu-latest + + steps: + - name: Deploy to EC2 via SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.EC2_HOST }} + username: ubuntu + key: ${{ secrets.EC2_SSH_KEY }} + script: | + echo "[1] Pulling latest Docker image..." + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test + + echo "[2] Stopping old container..." + docker stop spring-app || true + docker rm spring-app || true + + echo "[3] Running new container..." + docker run -d \ + --name spring-app \ + --env-file /home/ubuntu/app/.env \ + -p 8080:8080 \ + --restart unless-stopped \ + ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test + + echo "Deployment Completed Successfully!" + diff --git a/.gitignore b/.gitignore index c4df8f7..6fd5096 100644 --- a/.gitignore +++ b/.gitignore @@ -144,4 +144,6 @@ replay_pid* # End of https://www.toptal.com/developers/gitignore/api/java,intellij -.env \ No newline at end of file +.env +!gradle/wrapper/gradle-wrapper.jar + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1afbd07 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +# Dockerfile + +# OpenJDK 17 공식 교체 이미지 (openjdk:17 제거됨) +FROM eclipse-temurin:17-jdk + +ARG JAR_FILE=build/libs/*.jar +COPY ${JAR_FILE} app.jar + +ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/build.gradle b/build.gradle index 128a9ec..eb2e76e 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'io.spring.dependency-management' version '1.1.7' } -group = 'graduation.project' +group = 'graduation.project.DoDutch_server' version = '0.0.1-SNAPSHOT' java { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..8bdaf60 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b..2e11132 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index faf9300..adff685 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,8 +210,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9d21a21..c4bdd3a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/main/java/graduation/project/DoDutch_server/domain/expense/converter/ExpenseConverter.java b/src/main/java/graduation/project/DoDutch_server/domain/expense/converter/ExpenseConverter.java index 9a38249..64755cf 100644 --- a/src/main/java/graduation/project/DoDutch_server/domain/expense/converter/ExpenseConverter.java +++ b/src/main/java/graduation/project/DoDutch_server/domain/expense/converter/ExpenseConverter.java @@ -4,7 +4,6 @@ import graduation.project.DoDutch_server.domain.expense.entity.Expense; import graduation.project.DoDutch_server.domain.member.entity.Member; -import java.time.LocalDate; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/AllExpenseByDateResponseDto.java b/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/AllExpenseByDateResponseDto.java index 6cd099c..1869663 100644 --- a/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/AllExpenseByDateResponseDto.java +++ b/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/AllExpenseByDateResponseDto.java @@ -1,6 +1,5 @@ package graduation.project.DoDutch_server.domain.expense.dto; -import graduation.project.DoDutch_server.domain.expense.entity.ExpenseCategory; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/ExpenseRequestDto.java b/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/ExpenseRequestDto.java index cd6e4a3..aead3c6 100644 --- a/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/ExpenseRequestDto.java +++ b/src/main/java/graduation/project/DoDutch_server/domain/expense/dto/ExpenseRequestDto.java @@ -1,12 +1,9 @@ package graduation.project.DoDutch_server.domain.expense.dto; import graduation.project.DoDutch_server.domain.expense.entity.ExpenseCategory; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import lombok.*; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.List; @Getter diff --git a/src/main/java/graduation/project/DoDutch_server/domain/trip/dto/Response/TripDetailResponseDTO.java b/src/main/java/graduation/project/DoDutch_server/domain/trip/dto/Response/TripDetailResponseDTO.java index f7a9c87..17f683c 100644 --- a/src/main/java/graduation/project/DoDutch_server/domain/trip/dto/Response/TripDetailResponseDTO.java +++ b/src/main/java/graduation/project/DoDutch_server/domain/trip/dto/Response/TripDetailResponseDTO.java @@ -1,11 +1,11 @@ package graduation.project.DoDutch_server.domain.trip.dto.Response; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import com.fasterxml.jackson.annotation.JsonInclude; import java.time.LocalDate; import java.util.List; diff --git a/src/main/java/graduation/project/DoDutch_server/global/common/exception/ExceptionAdvice.java b/src/main/java/graduation/project/DoDutch_server/global/common/exception/ExceptionAdvice.java index 6fa4ff0..a947dc6 100644 --- a/src/main/java/graduation/project/DoDutch_server/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/graduation/project/DoDutch_server/global/common/exception/ExceptionAdvice.java @@ -1,7 +1,6 @@ package graduation.project.DoDutch_server.global.common.exception; import graduation.project.DoDutch_server.global.common.apiPayload.code.status.ErrorStatus; -import graduation.project.DoDutch_server.global.common.exception.GeneralException; import graduation.project.DoDutch_server.global.common.apiPayload.code.dto.ErrorReasonDTO; import graduation.project.DoDutch_server.global.common.apiPayload.ApiResponse; import jakarta.servlet.http.HttpServletRequest;