- Add Docker Compose configurations for dev, prod, and standalone environments - Add database initialization scripts (init-db.sh, init-db-docker.sh) - Add enhanced start-docker-linux.sh with DB init support - Add comprehensive database initialization guide - Support for automatic dbexport.pgsql import on first run - Include safety checks for production environment
145 lines
6.1 KiB
Bash
145 lines
6.1 KiB
Bash
#!/bin/bash
|
|
|
|
# MAC OS 만 실행
|
|
# if [[ "$(uname -s)" != "Darwin" ]]; then
|
|
# echo "This script runs on MAC OS only."
|
|
# echo "Current OS: $(uname -s)"
|
|
# exit 1
|
|
# fi
|
|
|
|
# ----------------------------------------------------------------------
|
|
# 기존 빌드 폴더 삭제 및 새로운 빌드 시작
|
|
# ----------------------------------------------------------------------
|
|
echo "Cleaning up old build artifacts..."
|
|
rm -rf WebContent/WEB-INF/classes/*
|
|
|
|
echo "Building Java application for development..."
|
|
|
|
# 필요한 디렉토리 생성
|
|
mkdir -p WebContent/WEB-INF/classes
|
|
mkdir -p WebContent/WEB-INF/lib # lib 폴더 존재 확인
|
|
|
|
# ----------------------------------------------------------------------
|
|
# Servlet API JAR 파일 존재 여부 확인 (단순화된 방식)
|
|
# ----------------------------------------------------------------------
|
|
SERVLET_API_JAR_PRIMARY_PATH="WebContent/WEB-INF/lib/javax.servlet-api-4.0.1.jar"
|
|
SERVLET_API_JAR_ALTERNATIVE_PATH="WebContent/WEB-INF/lib/servlet-api.jar"
|
|
|
|
if [ ! -f "$SERVLET_API_JAR_PRIMARY_PATH" ] && [ ! -f "$SERVLET_API_JAR_ALTERNATIVE_PATH" ]; then
|
|
echo "---------------------------------------------------------------------------------"
|
|
echo "ERROR: Servlet API JAR (javax.servlet-api-4.0.1.jar or servlet-api.jar)"
|
|
echo " not found in WebContent/WEB-INF/lib/"
|
|
echo ""
|
|
echo "Please add the appropriate Servlet API JAR for your project."
|
|
echo "You can typically find this JAR in a Tomcat distribution's 'lib' folder,"
|
|
echo "or download it from a trusted source like Maven Central Repository."
|
|
echo ""
|
|
echo "Build cannot proceed without it."
|
|
echo "---------------------------------------------------------------------------------"
|
|
exit 1
|
|
else
|
|
if [ -f "$SERVLET_API_JAR_PRIMARY_PATH" ]; then
|
|
echo "DEBUG: Confirmed Servlet API JAR is present at $SERVLET_API_JAR_PRIMARY_PATH"
|
|
elif [ -f "$SERVLET_API_JAR_ALTERNATIVE_PATH" ]; then
|
|
echo "DEBUG: Confirmed Servlet API JAR is present at $SERVLET_API_JAR_ALTERNATIVE_PATH"
|
|
fi
|
|
fi
|
|
# ----------------------------------------------------------------------
|
|
|
|
# 클래스패스 설정 (단순화된 방식)
|
|
EFFECTIVE_CLASSPATH="src:WebContent/WEB-INF/lib/*"
|
|
echo "DEBUG: Effective classpath for javac: $EFFECTIVE_CLASSPATH"
|
|
|
|
# src 폴더 내의 모든 .java 파일 컴파일
|
|
echo "Compiling Java files for development..."
|
|
|
|
find src -name "*.java" -print0 | xargs -0 javac -encoding UTF-8 -source 1.8 -target 1.8 -d WebContent/WEB-INF/classes -cp "$EFFECTIVE_CLASSPATH"
|
|
if [ $? -ne 0 ]; then
|
|
echo "Java compilation failed. Exiting script."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Java compilation successful."
|
|
# ----------------------------------------------------------------------
|
|
|
|
# src 폴더 내의 리소스 파일(.xml, .properties 등)을 classes 폴더로 복사 (macOS 호환 방식)
|
|
echo "Copying resource files for development..."
|
|
find src -type f \( -name "*.xml" -o -name "*.properties" \) | while read -r filepath; do
|
|
# 'src/' 접두사를 제거하여 상대 경로 생성
|
|
relative_path="${filepath#src/}"
|
|
target_file="WebContent/WEB-INF/classes/$relative_path"
|
|
|
|
# 대상 디렉토리 생성
|
|
mkdir -p "$(dirname "$target_file")" || { echo "Error: Failed to create directory $(dirname "$target_file")"; exit 1; }
|
|
|
|
# 파일 복사
|
|
cp "$filepath" "$target_file" || { echo "Error: Failed to copy $filepath to $target_file"; exit 1; }
|
|
done
|
|
# 파이프라인의 마지막 명령어의 종료 코드를 확인하기 위해 추가적인 검사가 필요할 수 있으나,
|
|
# while 루프 내에서 오류 발생 시 exit 하므로, 이 지점에 도달하면 성공으로 간주합니다.
|
|
# 만약 find가 아무 파일도 찾지 못해도 오류가 아니어야 하므로 $? 검사는 주의해야 합니다.
|
|
|
|
echo "Java application build complete for development."
|
|
# ----------------------------------------------------------------------
|
|
# 빌드 종료
|
|
# ----------------------------------------------------------------------
|
|
|
|
# Git 변경사항 커밋 및 푸시
|
|
git add .
|
|
git commit -am "auto commit"
|
|
current_branch=$(git branch --show-current)
|
|
git push origin $current_branch
|
|
# 마스터 브랜치와 병합 여부 확인
|
|
echo "You are currently on branch: $current_branch"
|
|
echo "Would you like to merge the current branch with main? (Y/N) [Y]"
|
|
read proceed_merge
|
|
proceed_merge=${proceed_merge:-Y}
|
|
if [ "$proceed_merge" == "Y" ] || [ "$proceed_merge" == "y" ]; then
|
|
# 마스터 브랜치로 전환 및 업데이트
|
|
git checkout main
|
|
git pull origin main
|
|
# 현재 브랜치를 마스터에 병합
|
|
git merge --no-edit $current_branch
|
|
# 병합 결과 푸시
|
|
git push origin main
|
|
# 원래 브랜치로 돌아가기
|
|
git checkout $current_branch
|
|
fi
|
|
# 새로운 브랜치 생성
|
|
# 현재 날짜를 YYYYMMDD 형식으로 가져오기
|
|
current_date=$(date +'%Y%m%d')
|
|
# 브랜치 이름에서 날짜 부분 추출
|
|
branch_date=${current_branch:1:8}
|
|
# 현재 날짜와 브랜치 날짜가 같으면 뒤의 2자리 숫자를 증가시킴
|
|
if [ "$branch_date" == "$current_date" ]; then
|
|
# 브랜치 이름에서 뒤의 2자리 숫자 추출
|
|
branch_number=${current_branch:9:2}
|
|
# 숫자를 10진수로 변환하고 1 증가시킴
|
|
branch_number=$((10#$branch_number + 1))
|
|
else
|
|
# 날짜가 다르면 01부터 시작
|
|
branch_number=1
|
|
fi
|
|
# 사용 가능한 브랜치 이름 찾기
|
|
while true; do
|
|
# 2자리 숫자로 포맷팅
|
|
formatted_number=$(printf "%02d" $branch_number)
|
|
new_branch="V${current_date}${formatted_number}"
|
|
|
|
# 로컬과 원격에 해당 이름의 브랜치가 존재하는지 확인
|
|
if ! git show-ref --quiet refs/heads/$new_branch && \
|
|
! git ls-remote --exit-code --heads origin $new_branch > /dev/null 2>&1; then
|
|
break
|
|
fi
|
|
|
|
# 존재한다면 숫자 증가
|
|
branch_number=$((branch_number + 1))
|
|
done
|
|
# 새로운 브랜치 생성
|
|
git checkout -b $new_branch
|
|
# 새로운 브랜치 푸시 (원격 브랜치로 푸시하려면 git push origin $new_branch 실행)
|
|
git push origin $new_branch
|
|
# 변경 사항 확인
|
|
git status
|
|
# .env-dev 파일을 .env로 복사하여 원래 상태로 복원
|
|
# docker-compose -f docker-compose-dev.yml up -d --build |