1.프로젝트를 개발하고 Git으로 커밋을 하면 Webhook 서비스를 이용했다.
Webhook id로 해당 hook을 찾아서 excute-command를 실행해서 내가 원하는 쉘 스크립트를 실행할수 있다고 Git Webhook 사용글에 올려놨다.
지금은 스프링프로젝트를 만들때 톰캣이 내장되어있기에 해당 내장된 톰캣을 사용하여 실행할것이
다.
#!/bin/bash
home_path=$(dirname $(realpath "$0"))
# 프로젝트 디렉토리 설정
PROJECT_DIR="$home_path/project_daeduk"
REPO_URL="***" # 깃허브 래포지토리 주소
LOGFILE="$home_path/project_deploy.log"
# 로그 출력 함수
log() {
echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> "$LOGFILE"
}
log "Starting deployment script"
# 기존 프로젝트 디렉토리 제거
if [ -d "$PROJECT_DIR" ]; then
log "Removing existing project directory"
rm -rf "$PROJECT_DIR"
fi
# 프로젝트 클론
log "Cloning project from $REPO_URL"
git clone "$REPO_URL" "$PROJECT_DIR"
if [ $? -ne 0 ]; then
log "Failed to clone repository"
exit 1
fi
# Gradle 빌드 실행을 위해 디렉토리 변경
cd "$PROJECT_DIR/daeduk" || { log "Failed to change directory to $PROJECT_DIR/daeduk"; exit 1; }
# Gradle 빌드
log "Building project with Gradle"
./gradlew clean build
if [ $? -ne 0 ]; then
log "Gradle build failed"
exit 1
fi
# 빌드된 .war 파일 찾기
WAR_FILE=$(find build/libs -name "*.war" | head -n 1)
if [ -z "$WAR_FILE" ]; then
log "No .war file found"
exit 1
fi
log ".war file found: $WAR_FILE"
# 기존 실행되고 있는 war의 프로세스 죽이기
log "Removing existing daeduk.war process"
DAEDUK_PID=$(pgrep -f daeduk.war)
if [ -n "$DAEDUK_PID" ]; then
kill -9 "$DAEDUK_PID"
log "Killed existing daeduk.war process (PID: $DAEDUK_PID)"
else
log "No existing daeduk.war process found"
fi
# 새 .war 파일 실행
log "Starting new .war process"
nohup java -jar "$WAR_FILE" > "$home_path/nohup.out" 2>&1 &
if [ $? -ne 0 ]; then
log "Failed to start new .war process"
exit 1
fi
log "Deployment script completed successfully"
# nohup 실행 결과를 로그에 추가
sleep 2
log "nohup output:"
tail -n 10 "$home_path/nohup.out" >> "$LOGFILE"
깃에 커밋하게 되면 클라우드 서버는 해당 깃 래파지토리의 프로젝트를 가져와 .war로 빌드후 해당 war를 실행하는 스크립이다.