Skip to content

Commit 58503e5

Browse files
committed
feat/#53 cicd 분리, 구현 완료
1 parent d181fb9 commit 58503e5

File tree

4 files changed

+156
-0
lines changed

4 files changed

+156
-0
lines changed

.github/workflows/cd-prod.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: CD to EC2 - Main (Production)
2+
3+
4+
on:
5+
push:
6+
branches: [ "main" ]
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
run-docker-image-on-ec2:
13+
# build-docker-image (위)과정이 완료되어야 실행됩니다.
14+
needs: build-docker-image
15+
runs-on: self-hosted
16+
17+
steps:
18+
19+
# 최신 이미지를 풀받습니다
20+
- name: docker pull
21+
run: sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/lawmon-backend
22+
23+
# 백엔드 앱 컨테이너만 중지 및 삭제
24+
- name: docker stop backend container
25+
run: |
26+
sudo docker ps -q --filter "name=backend-lawmon" | xargs -r sudo docker stop
27+
sudo docker ps -aq --filter "name=backend-lawmon" | xargs -r sudo docker rm -f
28+
29+
# app-network 가 없으면 생성
30+
- name: Ensure Docker Network Exists
31+
run: |
32+
sudo docker network inspect app-network >/dev/null 2>&1 || \
33+
sudo docker network create app-network
34+
35+
# database container 실행 -> 최초에만 실행
36+
- name: Run database containers
37+
run: sudo docker compose -f infra/database/docker-compose.database.yml up -d --build
38+
39+
# monitoring container 실행 -> 최초에만 실행
40+
# - name: Run monitoring containers
41+
# run: sudo docker compose -f infra/monitoring/docker-compose.monitoring.yml up -d --build
42+
43+
# app container 실행
44+
- name: Run app containers
45+
run: sudo docker compose -f infra/app/docker-compose.app.yml up -d --build
46+
47+
# 미사용 이미지를 정리합니다
48+
- name: delete old docker image
49+
run: sudo docker system prune -af

.github/workflows/cd-test.yml

Whitespace-only changes.

.github/workflows/ci.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
name: Java CI with Gradle
2+
3+
# 동작 조건 설정 : main 브랜치에 push 혹은 pull request가 발생할 경우 동작한다.
4+
on:
5+
pull_request:
6+
branches: [ "develop", "release", "main" ] # PR 대상 기준
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
# Spring Boot 애플리케이션을 빌드하여 도커허브에 푸시하는 과정
13+
build-docker-image:
14+
name: Build and Push Docker Image
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v3
18+
19+
# 캐시 복원: Gradle User Home
20+
- name: Restore Gradle Cache
21+
uses: actions/cache@v3
22+
with:
23+
path: |
24+
~/.gradle/caches
25+
~/.gradle/wrapper
26+
key: gradle-cache-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
27+
restore-keys: gradle-cache-${{ runner.os }}-
28+
29+
# Create application-prod.yml
30+
- name: Create application-prod.yml
31+
run: |
32+
mkdir -p ./src/main/resources
33+
echo "${{ secrets.APPLICATION_PROD }}" > ./src/main/resources/application-prod.yml
34+
35+
# Java 21 세팅
36+
- name: Set up JDK 21
37+
uses: actions/setup-java@v3
38+
with:
39+
java-version: '21'
40+
distribution: 'temurin'
41+
42+
# Spring Boot 애플리케이션 빌드
43+
- name: Grant execute permission for gradlew
44+
run: chmod +x gradlew
45+
46+
- name: Build with Gradle
47+
uses: gradle/gradle-build-action@v3
48+
with:
49+
arguments: clean bootJar
50+
51+
52+
# Docker 이미지 빌드
53+
- name: docker image build
54+
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/lawmon-backend .
55+
56+
# DockerHub 로그인
57+
- name: docker login
58+
uses: docker/login-action@v2
59+
with:
60+
username: ${{ secrets.DOCKERHUB_USERNAME }}
61+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
62+
63+
# Docker Hub 이미지 푸시
64+
- name: docker Hub push
65+
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/lawmon-backend
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
services:
2+
cadvisor:
3+
image: gcr.io/cadvisor/cadvisor:latest
4+
container_name: cadvisor
5+
ports:
6+
- "8081:8080" # Grafana에서 이 포트를 Prometheus가 스크랩함
7+
volumes:
8+
- /:/rootfs:ro
9+
- /var/run:/var/run:ro
10+
- /sys:/sys:ro
11+
- /var/lib/docker/:/var/lib/docker:ro
12+
networks:
13+
- app-network
14+
15+
prometheus:
16+
image: prom/prometheus:latest
17+
container_name: prometheus
18+
ports:
19+
- "9090:9090"
20+
volumes:
21+
- ./prometheus.yml:/etc/prometheus/prometheus.yml # Prometheus 설정 파일
22+
networks:
23+
- app-network
24+
25+
grafana:
26+
image: grafana/grafana:latest
27+
container_name: grafana
28+
ports:
29+
- "3000:3000"
30+
volumes:
31+
- grafana-storage:/var/lib/grafana
32+
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
33+
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
34+
networks:
35+
- app-network
36+
37+
volumes:
38+
grafana-storage:
39+
40+
networks:
41+
app-network:
42+
external: true

0 commit comments

Comments
 (0)