Skip to content

삭제할 커밋!

삭제할 커밋! #75

Workflow file for this run

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: 키키하이 dev CI-CD 파이프라인
on:
push:
branches: [ "develop","feat/LOG"]
jobs:
#1. 개발 서버 CI, Build 용
CI:
runs-on: ubuntu-22.04
services:
mysql:
image: mysql:8.0
ports:
- '3306:3306'
env:
MYSQL_DATABASE: kkh_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
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
ports:
- 9200:9200
options: >-
--health-cmd "curl -f http://localhost:9200/_cluster/health || exit 1"
--health-interval 10s
--health-timeout 5s
--health-retries 10
env:
discovery.type: single-node
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
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_PROD_YML }}" > ./src/main/resources/application-prod.yml
echo "${{ secrets.APPLICATION_OAUTH2_YML }}" > ./src/main/resources/application-oauth2.yml
mkdir -p src/test/resources
echo "${{ secrets.APPLICATION_TEST_YML }}" > ./src/test/resources/application-test.yml
echo "${{ secrets.LOGBACK_TEST_XML }}" > ./src/test/resources/logback-test.xml
# 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 }}
# 5. 테스트 컨테이너들 작동여부 체크
- 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
- name: Elasticsearch 체크
run: |
until curl -sSf http://localhost:9200/_cluster/health; do
echo "Waiting for Elasticsearch..."
sleep 5
done
# 5-2. Nori 플러그인 설치
- name: Install Nori plugin
run: |
CONTAINER_ID=$(docker ps -q -f ancestor=docker.elastic.co/elasticsearch/elasticsearch:7.17.0)
echo "Elasticsearch container ID: $CONTAINER_ID"
docker exec $CONTAINER_ID bin/elasticsearch-plugin install analysis-nori --batch
docker restart $CONTAINER_ID
sleep 30
# 6. Gradle 빌드
- name: Gradle 빌드
run: ./gradlew clean build
#7. 도커 허브 로그인
- name: Docker 로그인
uses: docker/login-action@v3
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_ACCESS_TOKEN}}
#8. 도커 이미지 Push
- name: Docker 이미지 Push
uses: docker/build-push-action@v4
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/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: "./docker/docker-compose.yml"
target: "/home/ubuntu/app/"
- name: 3. 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/docker/
docker compose pull spring
docker compose up -d spring