Skip to content

Merge pull request #50 from CAPS-DGU/develop #54

Merge pull request #50 from CAPS-DGU/develop

Merge pull request #50 from CAPS-DGU/develop #54

Workflow file for this run

name: Development CI/CD
on:
push:
branches: [ main ]
jobs:
build:
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'
# 📂 빌드 전에 환경변수를 로드하도록 설정
- name: Create application.yml for build
run: |
mkdir -p ./src/main/resources
echo "${{ secrets.DEVELOPMENT_APPLICATION }}" > ./src/main/resources/application.yml
# Gradle 캐시 설정 (Gradle Wrapper 포함)
- name: Cache Gradle packages
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: Build with Gradle Wrapper (Skip Tests)
run: ./gradlew build -x test
# Docker 빌드 및 Docker Hub에 푸시
- name: Docker build & push to Docker Hub
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
docker build -t ${{ secrets.DOCKER_USERNAME }}/caps-dev:${{ github.sha }} .
docker push ${{ secrets.DOCKER_USERNAME }}/caps-dev:${{ github.sha }}
docker logout
- name: Ensure EC2 deploy path exists
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.DEV_EC2_HOST }}
username: ubuntu
key: ${{ secrets.DEV_EC2_PRIVATE_KEY }}
script: |
mkdir -p /home/ubuntu/app/deploy
sudo chown -R ubuntu:ubuntu /home/ubuntu/app/deploy
- name: Copy compose stack to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.DEV_EC2_HOST }}
username: ubuntu
key: ${{ secrets.DEV_EC2_PRIVATE_KEY }}
source: "deploy/docker-compose.yml,deploy/backup-mysql-to-s3.sh,deploy/install-weekly-backup-cron.sh"
target: "/home/ubuntu/app/deploy/"
strip_components: 1
# EC2에 배포 (docker compose: mysql + redis + 앱, caps-network)
- name: Docker compose deploy to EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.DEV_EC2_HOST }}
username: ubuntu
key: ${{ secrets.DEV_EC2_PRIVATE_KEY }}
script: |
set -e
if ! sudo docker network inspect caps-network >/dev/null 2>&1; then
sudo docker network create caps-network
fi
sudo mkdir -p /home/ubuntu/app/config /home/ubuntu/app/deploy
sudo chown -R ubuntu:ubuntu /home/ubuntu/app
sudo chmod 755 /home/ubuntu/app/deploy
for f in /home/ubuntu/app/deploy/*.sh; do
[ -f "$f" ] && sudo chmod +x "$f"
done
echo "📄 application.yml (GitHub Secret)"
echo "${{ secrets.DEVELOPMENT_APPLICATION }}" | sudo tee /home/ubuntu/app/config/application.yml > /dev/null
sudo chmod 644 /home/ubuntu/app/config/application.yml
echo "📄 deploy .env"
{
echo "DOCKER_IMAGE=${{ secrets.DOCKER_USERNAME }}/caps-dev:${{ github.sha }}"
echo "MYSQL_ROOT_PASSWORD=${{ secrets.MYSQL_ROOT_PASSWORD }}"
echo "AWS_S3_BUCKET_NAME=${{ secrets.S3_BUCKET_NAME }}"
echo "DISCORD_WEBHOOK_URI=${{ secrets.DISCORD_WEBHOOK_URI }}"
} | sudo tee /home/ubuntu/app/deploy/.env > /dev/null
sudo chown ubuntu:ubuntu /home/ubuntu/app/deploy/.env
sudo chmod 600 /home/ubuntu/app/deploy/.env
echo "🛑 기존 단독 컨테이너 정리 (compose 전환)"
sudo docker stop caps-dev redis 2>/dev/null || true
sudo docker rm -f caps-dev redis 2>/dev/null || true
cd /home/ubuntu/app/deploy
echo "🚀 compose pull / up"
sudo docker compose --env-file .env -f docker-compose.yml pull caps-dev
sudo docker compose --env-file .env -f docker-compose.yml up -d --remove-orphans
echo "✅ 스택 상태"
sudo docker compose --env-file .env -f docker-compose.yml ps
echo "🧹 사용하지 않는 Docker 이미지 정리"
sudo docker system prune -af