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
26 changes: 26 additions & 0 deletions .github/workflows/ci-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: CI Docker Build

on:
push:
branches: [ "dev" ]
pull_request:
branches: [ "dev" ]

jobs:
build-and-test-docker:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Build Docker image
run: |
docker build -t issue-dive-app .

- name: Run tests inside Docker container
run: |
docker run --rm issue-dive-app ./gradlew test
File renamed without changes.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,7 @@ out/
# Application Properties
application.properties
application-test.properties

.env
.java-version
logs/
28 changes: 28 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 1. 빌드 스테이지
FROM gradle:8.14.3-jdk17 AS builder

WORKDIR /app

# Gradle 캐시 최적화를 위해 build.gradle과 settings.gradle 먼저 복사
COPY build.gradle settings.gradle gradlew ./
COPY gradle ./gradle

# 의존성 다운로드
RUN ./gradlew --no-daemon dependencies

# 나머지 소스 복사 및 빌드
COPY src ./src
# RUN ./gradlew build --no-daemon -Dspring.profiles.active=test
RUN ./gradlew assemble --no-daemon -Dspring.profiles.active=test


# 2. 실행 스테이지
FROM openjdk:17-jdk-slim

WORKDIR /app

# 빌드 산출물을 복사
COPY --from=builder /app/build/libs/*.jar app.jar

# 컨테이너 실행 시
ENTRYPOINT ["java", "-jar", "app.jar"]
42 changes: 42 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
version: '3.8'

services:
mysql:
image: mysql:8
container_name: issueDive-mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: issue_dive
# 일반 사용자 추가하지 않거나 별도의 사용자명으로 변경
# 예를 들어 USER는 issueuser 등으로 변경 가능
# MYSQL_USER: issueuser
# MYSQL_PASSWORD: user_password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5

app:
build: .
container_name: issueDive-app
depends_on:
mysql:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL}
SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME}
SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD}
ports:
- "8080:8080"
command: ./gradlew bootRun
# volumes:
# - ./:/app
tty: true

volumes:
mysql-data:
Loading