Skip to content

Merge pull request #78 from PinHouse/refactor/코드-리팩토링 #54

Merge pull request #78 from PinHouse/refactor/코드-리팩토링

Merge pull request #78 from PinHouse/refactor/코드-리팩토링 #54

Workflow file for this run

name: 핀하우스 dev CI-CD 파이프라인
### develop으로 Merge 되었을 때, 테스트 코드를 실행하여, 빌드 및 배포하는 로직을 수행한다.
on:
push:
branches: [ "develop"]
jobs:
#1. 개발 서버 CI, Build 용
CI:
runs-on: ubuntu-22.04
services:
mysql:
image: mysql:8.0
ports:
- '3306:3306'
env:
MYSQL_DATABASE: pinhouse_test
MYSQL_USER: testuser
MYSQL_PASSWORD: testpass
MYSQL_ROOT_PASSWORD: root
redis:
image: redis:7.2.5
ports:
- '6379:6379'
mongo:
image: mongo:6.0
ports:
- 27017:27017
permissions:
contents: write
checks: write
pull-requests: write
steps:
# 1. repository checkout
- uses: actions/checkout@v4
# 2. jdk 환경 설치
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# 3. '*.yml' 파일 세팅
- name: application.yml 파일 설정
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml
echo "${{ secrets.APPLICATION_DEV_YML }}" > ./src/main/resources/application-dev.yml
echo "${{ secrets.APPLICATION_OAUTH2_DEV_YML }}" > ./src/main/resources/application-oauth2-dev.yml
mkdir -p src/test/resources
echo "${{ secrets.APPLICATION_TEST_YML }}" > ./src/test/resources/application-test.yml
# 체크
- name: MySQL 체크
run: |
until nc -z localhost 3306; do
echo "Waiting for MySQL..."
sleep 3
done
- name: Redis 체크
run: |
until nc -z localhost 6379; do
echo "Waiting for Redis..."
sleep 3
done
- name: MongoDB 체크
run: |
until nc -z localhost 27017; do
echo "Waiting for MongoDB..."
sleep 3
done
# 4. gradle 환경 설치
- name: Gradle Wrapper 권한 부여
run: chmod +x gradlew
# 4-1. 캐싱
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}
- name: Gradle 빌드
run: ./gradlew clean build
# 5. JUnit 테스트 결과 게시
- name: Test 결과 출력
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
junit_files: '**/build/test-results/test/TEST-*.xml'
github_token: ${{ secrets.GITHUB_TOKEN }}
#6. 도커 허브 로그인
- name: Docker 로그인
uses: docker/login-action@v3
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_ACCESS_TOKEN}}
#7. 도커 이미지 Push
- name: Docker 이미지 Push
uses: docker/build-push-action@v5
with:
context: .
dockerfile: Dockerfile
push: true
tags: ${{secrets.DOCKER_USERNAME}}/server:latest
CD:
needs: CI
runs-on: ubuntu-22.04
steps:
- name: 1. Checkout source code
uses: actions/checkout@v3
- name: env 생성
run: echo "${{ secrets.ENV }}" > .env
- name: 2. .env 파일 EC2에 전송
uses: appleboy/scp-action@master
with:
host: ${{ secrets.EC2_PUBLIC_IP }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: ".env" # 방금 생성한 .env 파일
target: "/home/ubuntu/app/pinhouse_docker/"
- name: 3. docker-compose.yml 전달
uses: appleboy/scp-action@master
with:
host: ${{ secrets.EC2_PUBLIC_IP }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: "./pinhouse_docker/docker-compose.yml"
target: "/home/ubuntu/app/"
- name: 4. EC2에서 docker-compose 실행
uses: appleboy/ssh-action@master # SSH를 사용하여 EC2에서 명령 실행
with:
host: ${{ secrets.EC2_PUBLIC_IP }} # EC2 퍼블릭 IP
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script: |
# docker-compose 명령어 실행
cd /home/ubuntu/app/pinhouse_docker/
docker compose pull spring
docker compose up -d spring
notify-discord:
needs:
- CD
runs-on: ubuntu-latest
steps:
- name: 체크아웃
uses: actions/checkout@v2
- name: 최신 커밋 추출하기
id: commit-info
run: |
COMMIT_MSG=$(git log -1 --pretty=format:'%s')
COMMIT_AUTHOR=$(git log -1 --pretty=format:'%an')
COMMIT_HASH=$(git log -1 --pretty=format:'%h')
echo "message=$COMMIT_MSG" >> $GITHUB_OUTPUT
echo "author=$COMMIT_AUTHOR" >> $GITHUB_OUTPUT
echo "hash=$COMMIT_HASH" >> $GITHUB_OUTPUT
- name: 디스코드 알림 전송하기
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{secrets.DISCORD_WEBHOOK_URL}}
title: "✅ 개발서버 배포"
description: |
**✅ 공지**: 개발 환경에 새로운 변경사항이 배포되었습니다.
**배포 정보**:
- 커밋: `${{ github.sha }}`
- 배포자: ${{ github.actor }}
- 시간: ${{ github.event.head_commit.timestamp }}
[커밋 보기](${{ github.event.head_commit.url }})
color: 0x4287f5
username: 핀하우스 GitHub Dev Bot
avatar_url: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png