Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/server-ci.yml
Original file line number Diff line number Diff line change
@@ -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'
25 changes: 15 additions & 10 deletions server/Dockerfile
Original file line number Diff line number Diff line change
@@ -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

# 실행 명령어
Expand Down