# ################################################################### # build.ps1 - FGTools Docker 이미지 빌드 스크립트 (PowerShell) # ################################################################### # 용도: Windows/WSL2에서 docker-compose build 오류 해결 # # 사용법: # Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # .\scripts\build.ps1 # 기본 빌드 # .\scripts\build.ps1 -Clean # 캐시 무시하고 빌드 # .\scripts\build.ps1 -Force # 완전 초기화 후 빌드 # .\scripts\build.ps1 -Push # 빌드 및 푸시 # ################################################################### param( [switch]$Clean = $false, [switch]$Force = $false, [switch]$Push = $false, [switch]$Help = $false ) # 설정 $REGISTRY = "reg.firstgarden.co.kr" $IMAGE_NAME = "fgtools:latest" $FULL_IMAGE = "$REGISTRY/$IMAGE_NAME" # 함수: 메시지 출력 function Write-Log { param([string]$Message) Write-Host "[FGTools Build] $Message" -ForegroundColor Green } function Write-Error-Custom { param([string]$Message) Write-Host "[FGTools Build ERROR] $Message" -ForegroundColor Red } function Write-Warn { param([string]$Message) Write-Host "[FGTools Build WARN] $Message" -ForegroundColor Yellow } # 함수: 기본 빌드 function Build-Normal { Write-Log "도커 이미지 빌드 시작 (일반 모드)..." $env:DOCKER_BUILDKIT = 0 docker compose build if ($LASTEXITCODE -eq 0) { Write-Log "✓ 빌드 완료: $FULL_IMAGE" } else { Write-Error-Custom "빌드 실패" exit 1 } } # 함수: 캐시 무시 빌드 function Build-Clean { Write-Log "도커 이미지 빌드 시작 (캐시 무시)..." docker compose build --no-cache if ($LASTEXITCODE -eq 0) { Write-Log "✓ 빌드 완료: $FULL_IMAGE" } else { Write-Error-Custom "빌드 실패" exit 1 } } # 함수: 강제 초기화 후 빌드 function Build-Force { Write-Log "완전 초기화 모드 시작..." Write-Warn "서비스 중지 중..." docker compose down 2>$null Write-Warn "이전 이미지 삭제 중..." docker rmi $FULL_IMAGE 2>$null Write-Warn "BuildKit 캐시 정리 중..." docker buildx prune -a --force 2>$null Write-Log "도커 이미지 빌드 시작..." $env:DOCKER_BUILDKIT = 0 docker compose build if ($LASTEXITCODE -eq 0) { Write-Log "✓ 빌드 완료: $FULL_IMAGE" } else { Write-Error-Custom "빌드 실패" exit 1 } } # 함수: 빌드 및 푸시 function Build-And-Push { Write-Log "도커 이미지 빌드 및 푸시 시작..." $env:DOCKER_BUILDKIT = 0 docker compose build if ($LASTEXITCODE -ne 0) { Write-Error-Custom "빌드 실패" exit 1 } Write-Log "이미지 푸시 중..." docker compose push if ($LASTEXITCODE -eq 0) { Write-Log "✓ 빌드 및 푸시 완료: $FULL_IMAGE" } else { Write-Error-Custom "푸시 실패" exit 1 } } # 함수: 사용법 출력 function Show-Usage { $usage = @" FGTools Docker 이미지 빌드 스크립트 사용법: .\scripts\build.ps1 # 기본 빌드 .\scripts\build.ps1 -Clean # 캐시 무시하고 빌드 .\scripts\build.ps1 -Force # 완전 초기화 후 빌드 .\scripts\build.ps1 -Push # 빌드 및 푸시 .\scripts\build.ps1 -Help # 이 메시지 출력 옵션: -Clean 캐시를 무시하고 빌드 -Force 완전 초기화 후 빌드 (강력함) -Push 빌드 및 사설 레지스트리에 푸시 -Help 도움말 출력 트러블슈팅: WSL2에서 "image already exists" 오류 발생 시: 1. 먼저 clean 모드 시도: .\scripts\build.ps1 -Clean 2. 실패 시 force 모드 시도: .\scripts\build.ps1 -Force 3. 계속 실패하면: docker system prune -a 참고: 처음 실행 시 실행 정책 변경 필요: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser "@ Write-Host $usage } # 메인 로직 if ($Help) { Show-Usage exit 0 } if ($Force) { Build-Force } elseif ($Clean) { Build-Clean } elseif ($Push) { Build-And-Push } else { Build-Normal } Write-Log "완료!"