diff --git a/.github/workflows/server-ci.yml b/.github/workflows/server-ci.yml new file mode 100644 index 000000000..d6087ce85 --- /dev/null +++ b/.github/workflows/server-ci.yml @@ -0,0 +1,44 @@ +name: Java CI with Gradle (PR Check) + +on: + pull_request: + branches: [ "develop" ] + paths: + - 'server/**' + +permissions: + checks: write + pull-requests: write + +jobs: + test: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: ./server + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'corretto' + + # Gradle 캐싱 (테스트 속도 향상) + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + # [핵심] 여기서 테스트만 수행! + - name: Run Tests + run: ./gradlew test + + # 테스트 결과 리포트 게시 + - name: Publish Test Report + if: always() # 실패해도 리포트는 남김 + uses: mikepenz/action-junit-report@v4 + with: + report_paths: '**/build/test-results/test/TEST-*.xml' diff --git a/server/Dockerfile b/server/Dockerfile index b69c8a73f..a5162713a 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,22 +1,27 @@ -# [Stage 1] Build 환경: Gradle 공식 이미지 사용 +# [Stage 1] Build 환경 FROM gradle:8.5-jdk17 AS builder WORKDIR /project -# 의존성 캐싱을 위해 설정 파일만 먼저 복사 +# 1. 의존성 파일들만 먼저 복사 (소스코드보다 변경이 적음) COPY build.gradle settings.gradle ./ -# 소스 코드 복사 + +# 2. [핵심] 소스 코드 없이 라이브러리만 미리 다운로드 (레이어 캐싱 활용) +# dependencies: 의존성만 다운로드하는 Gradle task +RUN gradle dependencies --no-daemon + +# 3. 소스 코드 복사 (이 부분이 바뀌어도 위 2번 단계는 캐시된 걸 씀) COPY src ./src -# 빌드 실행 -# --no-daemon: 일회성 빌드에서 데몬을 띄우지 않아 메모리 절약 -RUN gradle clean build --no-daemon -x test +# 4. 실제 빌드 실행 +# --mount=type=cache: Gradle 캐시를 로컬에 저장해두고 재사용 (반복 빌드 속도 향상) +# -x test: 테스트 제외 +# --parallel: 병렬 빌드로 속도 향상 +RUN --mount=type=cache,target=/home/gradle/.gradle/caches \ + gradle clean build --no-daemon -x test --parallel -# [Stage 2] Run 환경: AWS 및 일반 환경에서 가장 안정적인 Amazon Corretto 17 사용 -# 기존 openjdk:17-jdk-slim은 Deprecated 되어 삭제됨 +# [Stage 2] Run 환경 FROM amazoncorretto:17 WORKDIR /app - -# Stage 1에서 빌드된 Jar 파일만 복사해옴 COPY --from=builder /project/build/libs/*.jar app.jar # 실행 명령어