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
28 changes: 28 additions & 0 deletions .github/workflows/CD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: CD

on:
workflow_run:
workflows: ["CI"] # CI 워크플로우의 이름을 기입
types:
- completed

jobs:
deploy:
environment: env
# build 잡이 성공한 뒤에만 실행되도록 의존성 설정
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest

steps:
- name: SSH and Deploy
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.EC2_HOST }} # EC2 호스트 (IP 또는 도메인)
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
# Redis 컨테이너에서 flushall 명령 실행 (비대화형으로 실행)
docker exec redis-app redis-cli flushall

# 배포 스크립트 실행
./deploy.sh
108 changes: 108 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: CI

on:
push:
branches: [ "dev" ]

jobs:
build:
environment: env
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0

# 1. application.yml 생성
- name: Create application.yml
run: |
mkdir -p src/main/resources
touch src/main/resources/application.yml
echo "server:" >> src/main/resources/application.yml
echo " port: 8080" >> src/main/resources/application.yml

echo "spring:" >> src/main/resources/application.yml
echo " datasource:" >> src/main/resources/application.yml
echo " driver-class-name: com.mysql.cj.jdbc.Driver" >> src/main/resources/application.yml
echo " url: '${{ secrets.DB_URL }}'" >> src/main/resources/application.yml
echo " username: '${{ secrets.DB_USERNAME }}'" >> src/main/resources/application.yml
echo " password: '${{ secrets.DB_PASSWORD }}'" >> src/main/resources/application.yml

echo " data:" >> src/main/resources/application.yml
echo " redis:" >> src/main/resources/application.yml
echo " host: '${{ secrets.REDIS_HOST }}'" >> src/main/resources/application.yml
echo " port: ${{ secrets.REDIS_PORT }}" >> src/main/resources/application.yml

echo " jpa:" >> src/main/resources/application.yml
echo " hibernate:" >> src/main/resources/application.yml
echo " ddl-auto: update" >> src/main/resources/application.yml
echo " show-sql: true" >> src/main/resources/application.yml
echo " properties:" >> src/main/resources/application.yml
echo " hibernate:" >> src/main/resources/application.yml
echo " dialect: org.hibernate.dialect.MySQLDialect" >> src/main/resources/application.yml
echo " format_sql: true" >> src/main/resources/application.yml

echo " mail:" >> src/main/resources/application.yml
echo " host: smtp.gmail.com" >> src/main/resources/application.yml
echo " port: 587" >> src/main/resources/application.yml
echo " username: '${{ secrets.MAIL_USERNAME }}'" >> src/main/resources/application.yml
echo " password: '${{ secrets.MAIL_PASSWORD }}'" >> src/main/resources/application.yml
echo " properties:" >> src/main/resources/application.yml
echo " mail.smtp.auth: true" >> src/main/resources/application.yml
echo " mail.smtp.starttls.enable: true" >> src/main/resources/application.yml

echo "jwt:" >> src/main/resources/application.yml
echo " secret: '${{ secrets.JWT_SECRET }}'" >> src/main/resources/application.yml

echo "kakao:" >> src/main/resources/application.yml
echo " api:" >> src/main/resources/application.yml
echo " key: '${{ secrets.KAKAO_API_KEY }}'" >> src/main/resources/application.yml
echo "application.yml 생성 완료"

# 2. Build 및 Jacoco 리포트 생성
- name: Build and Test with Jacoco
run: ./gradlew clean build test jacocoTestReport

# 3. Jacoco HTML 리포트를 GitHub Actions Artifacts로 업로드
- name: Upload Jacoco Report as Artifact
uses: actions/upload-artifact@v4
with:
name: jacoco-report
path: build/reports/jacoco/test/html

# 4. 테스트 결과 아티팩트 업로드
- name: Upload Test Reports
uses: actions/upload-artifact@v4
with:
name: test-reports
path: build/reports/tests/test

# 5. Docker Hub 로그인
- name: Docker Hub 로그인
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

# 6. Docker 이미지를 빌드하고 푸시하는 작업입니다.
- name: Build and Push Docker Image
env:
DOCKERHUB_USERNAME: tmdfl36
IMAGE_NAME: mapjiri
TAG: latest
run: |
docker buildx build --platform linux/amd64 -t $DOCKERHUB_USERNAME/$IMAGE_NAME:$TAG .
docker push $DOCKERHUB_USERNAME/$IMAGE_NAME:$TAG