From f4fc8253e1b386b1ba59b73ce679c9a0f57c3bb4 Mon Sep 17 00:00:00 2001 From: Mayne0213 Date: Sat, 10 Jan 2026 20:41:04 +0900 Subject: [PATCH] feat: add Gitea Actions workflow for Zot registry Replace GitHub Actions with Gitea Actions to build and push Docker images to the Zot registry. Co-Authored-By: Claude Opus 4.5 --- .gitea/workflows/build-push.yaml | 38 +++++++ scripts/common.sh | 180 ------------------------------- scripts/docker-build.sh | 96 ----------------- scripts/docker-cleanup.sh | 21 ---- 4 files changed, 38 insertions(+), 297 deletions(-) create mode 100644 .gitea/workflows/build-push.yaml delete mode 100755 scripts/common.sh delete mode 100755 scripts/docker-build.sh delete mode 100755 scripts/docker-cleanup.sh diff --git a/.gitea/workflows/build-push.yaml b/.gitea/workflows/build-push.yaml new file mode 100644 index 0000000..7781489 --- /dev/null +++ b/.gitea/workflows/build-push.yaml @@ -0,0 +1,38 @@ +name: Build and Push to Zot + +on: + push: + branches: [main] + workflow_dispatch: + +env: + REGISTRY: zot0213.kro.kr + IMAGE_NAME: jovies + +jobs: + build-and-push: + runs-on: k3s-home + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Zot Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.ZOT_USERNAME }} + password: ${{ secrets.ZOT_PASSWORD }} + + - name: Build and Push + uses: docker/build-push-action@v5 + with: + context: ./nextjs + file: ./Dockerfile + platforms: linux/arm64 + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} diff --git a/scripts/common.sh b/scripts/common.sh deleted file mode 100755 index 7bcbdc7..0000000 --- a/scripts/common.sh +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/bash - -# Jovies 스크립트 공통 유틸리티 함수들 -# 모든 Jovies 스크립트에서 사용할 수 있는 공통 기능들을 정의 - -set -e - -# 공통 스크립트의 절대 경로 기반 디렉토리 상수 -# 함수 호출 컨텍스트에 따라 BASH_SOURCE 해석이 달라질 수 있으므로 -# 로드 시점에 고정해 신뢰 가능한 루트를 계산한다 -JOVIES_SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -JOVIES_ROOT="$(dirname "$JOVIES_SCRIPTS_DIR")" - -# 색상 정의 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# 로깅 함수들 -log_info() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -log_warn() { - echo -e "${YELLOW}[WARN]${NC} $1" -} - -log_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -log_debug() { - echo -e "${BLUE}[DEBUG]${NC} $1" -} - -# 경로 계산 함수 -get_jovies_root() { - # 로드 시점에 고정된 루트 경로 반환 - echo "$JOVIES_ROOT" -} - -get_mayne_root() { - # jovies 루트를 기준으로 mayne 루트 경로 계산 - local jovies_root="$(get_jovies_root)" - echo "$(dirname "$(dirname "$jovies_root")")" -} - -# 확인 함수 -confirm_action() { - local message="$1" - local default="${2:-N}" - - if [[ "$default" == "Y" ]]; then - read -p "$message (Y/n): " -n 1 -r - echo - if [[ $REPLY =~ ^[Nn]$ ]]; then - return 1 - fi - return 0 - else - read -p "$message (y/N): " -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - return 0 - fi - return 1 - fi -} - -# 필수 디렉토리 확인 -check_required_dirs() { - local jovies_root="$(get_jovies_root)" - local dirs=("$@") - - for dir in "${dirs[@]}"; do - if [ ! -d "$jovies_root/$dir" ]; then - log_error "필수 디렉토리가 없습니다: $dir" - exit 1 - fi - done -} - -# 필수 파일 확인 -check_required_files() { - local jovies_root="$(get_jovies_root)" - local files=("$@") - - for file in "${files[@]}"; do - if [ ! -f "$jovies_root/$file" ]; then - log_error "필수 파일이 없습니다: $file" - exit 1 - fi - done -} - -# Docker 관련 유틸리티 -docker_cleanup_jovies() { - log_info "Jovies 관련 Docker 리소스 정리 중..." - - # 컨테이너 중지 및 삭제 - docker-compose -p jovies -f deploy/docker/docker-compose.yml down --remove-orphans 2>/dev/null || true - docker-compose -p jovies -f deploy/docker/docker-compose.dev.yml down --remove-orphans 2>/dev/null || true - local containers=$(docker ps -aq --filter "name=jovies" 2>/dev/null) - if [[ -n "$containers" ]]; then - echo "$containers" | xargs docker rm -f 2>/dev/null || true - fi - - # 이미지 삭제 - local images=$(docker images --filter "reference=jovies*" -q 2>/dev/null) - if [[ -n "$images" ]]; then - echo "$images" | xargs docker rmi -f 2>/dev/null || true - fi - images=$(docker images --filter "reference=*jovies*" -q 2>/dev/null) - if [[ -n "$images" ]]; then - echo "$images" | xargs docker rmi -f 2>/dev/null || true - fi - - # 볼륨 삭제 - local volumes=$(docker volume ls -q --filter "name=jovies" 2>/dev/null) - if [[ -n "$volumes" ]]; then - echo "$volumes" | xargs docker volume rm 2>/dev/null || true - fi - - # 네트워크 삭제 - docker network rm jovies-network-dev jovies-network-prod 2>/dev/null || true - - # 시스템 정리 - docker system prune -f - - log_info "Docker 리소스 정리 완료" -} - -# 환경 변수 로드 -load_env_file() { - local jovies_root="$(get_jovies_root)" - local env_file="$jovies_root/.env" - - if [ -f "$env_file" ]; then - log_info "환경 변수 파일 로드: $env_file" - source "$env_file" - return 0 - else - log_warn "환경 변수 파일이 없습니다: $env_file" - return 1 - fi -} - -# 에러 처리 -handle_error() { - local exit_code=$? - log_error "스크립트 실행 중 오류가 발생했습니다 (종료 코드: $exit_code)" - exit $exit_code -} - -# 스크립트 시작 시 공통 설정 -setup_script() { - # 에러 발생 시 자동으로 handle_error 함수 호출 - trap handle_error ERR - - # 스크립트 디렉토리로 이동 - cd "$(get_jovies_root)" - - log_info "스크립트 시작: $(basename "${BASH_SOURCE[1]}")" -} - -# 스크립트 종료 시 정리 -cleanup_script() { - local exit_code=$? - if [ $exit_code -eq 0 ]; then - log_info "스크립트 완료: $(basename "${BASH_SOURCE[1]}")" - else - log_error "스크립트 실패: $(basename "${BASH_SOURCE[1]}") (종료 코드: $exit_code)" - fi - exit $exit_code -} - -# 스크립트 종료 시 정리 함수 등록 -trap cleanup_script EXIT diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh deleted file mode 100755 index 26281a5..0000000 --- a/scripts/docker-build.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -# Jovies Docker 빌드 및 실행 스크립트 -# 공통 유틸리티 함수 로드 -source "$(dirname "${BASH_SOURCE[0]}")/common.sh" - -# 스크립트 설정 -setup_script - -log_info "🚀 Jovies Docker 빌드 및 실행 시작..." - -# 필수 디렉토리 및 파일 확인 -log_info "📁 폴더 구조 확인 중..." -check_required_dirs "services" "deploy/docker" - -log_info "📄 필수 파일 확인 중..." -check_required_files "deploy/docker/docker-compose.yml" "deploy/docker/docker-compose.dev.yml" "deploy/docker/Dockerfile.prod" "deploy/docker/Dockerfile.dev" - -log_info "✅ 폴더 구조 및 필수 파일 확인 완료!" - -# 환경 선택 -echo "" -log_info "🎯 실행할 환경을 선택하세요:" -echo "1) 개발 환경 (Development)" -echo "2) 프로덕션 환경 (Production)" -echo "3) 빌드만 (Build Only)" -read -p "선택 (1-3): " -n 1 -r -echo - -case ${REPLY} in - 1) - log_info "🔧 개발 환경 빌드 및 실행 중..." - cd deploy/docker - docker-compose -p jovies -f docker-compose.dev.yml build --no-cache - docker-compose -p jovies -f docker-compose.dev.yml up -d - JOVIES_ROOT=$(get_jovies_root) - cd "${JOVIES_ROOT}" - ENV_TYPE="development" - COMPOSE_FILE_PATH="deploy/docker/docker-compose.dev.yml" - ;; - 2) - log_info "🏭 프로덕션 환경 빌드 및 실행 중..." - cd deploy/docker - docker-compose -p jovies -f docker-compose.yml build --no-cache - docker-compose -p jovies -f docker-compose.yml up -d - JOVIES_ROOT=$(get_jovies_root) - cd "${JOVIES_ROOT}" - ENV_TYPE="production" - COMPOSE_FILE_PATH="deploy/docker/docker-compose.yml" - ;; - 3) - log_info "🔨 이미지 빌드만 실행 중..." - cd deploy/docker - log_info " - 개발 이미지 빌드 중..." - docker-compose -p jovies -f docker-compose.dev.yml build --no-cache - log_info " - 프로덕션 이미지 빌드 중..." - docker-compose -p jovies -f docker-compose.yml build --no-cache - JOVIES_ROOT=$(get_jovies_root) - cd "${JOVIES_ROOT}" - log_info "✅ 빌드 완료! 실행하려면 다시 이 스크립트를 실행하고 환경을 선택하세요." - exit 0 - ;; - *) - log_error "잘못된 선택입니다." - exit 1 - ;; -esac - -# 서비스 상태 확인 -echo "" -log_info "⏳ 서비스 시작 대기 중..." -sleep 10 - -echo "" -log_info "📊 서비스 상태 확인:" -docker-compose -p jovies -f "$COMPOSE_FILE_PATH" ps - -echo "" -log_info "🔍 컨테이너 로그 확인:" -echo " - 애플리케이션 로그: docker-compose -p jovies -f $COMPOSE_FILE_PATH logs -f app" - -echo "" -log_info "🌐 접속 URL:" -if [ "$ENV_TYPE" = "development" ]; then - echo " - 애플리케이션: http://localhost:3002" -else - echo " - 애플리케이션: http://localhost:3002" -fi - -echo "" -log_info "✅ Docker 빌드 및 실행 완료!" -echo "" -log_info "📋 유용한 명령어:" -echo " - 서비스 중지: docker-compose -p jovies -f $COMPOSE_FILE_PATH down" -echo " - 로그 확인: docker-compose -p jovies -f $COMPOSE_FILE_PATH logs -f" -echo " - 서비스 재시작: docker-compose -p jovies -f $COMPOSE_FILE_PATH restart" diff --git a/scripts/docker-cleanup.sh b/scripts/docker-cleanup.sh deleted file mode 100755 index 20c1480..0000000 --- a/scripts/docker-cleanup.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -# Jovies Docker Cleanup Script -# 공통 유틸리티 함수 로드 -source "$(dirname "${BASH_SOURCE[0]}")/common.sh" - -# 스크립트 설정 -setup_script - -log_info "🧹 Jovies Docker 리소스 정리 시작..." - -# 확인 메시지 -if ! confirm_action "모든 Jovies 관련 Docker 리소스를 정리하시겠습니까?"; then - log_info "정리를 취소했습니다." - exit 0 -fi - -# Docker 리소스 정리 실행 -docker_cleanup_jovies - -log_info "✅ Jovies Docker 리소스 정리 완료!"