Git으로 버전관리를 하고있어서 자동배포를 비슷하게 구현해보았다
핵심을 먼저 말하자면
5초마다 pull -> 변경사항이 있으면 새롭게 빌드 없으면 다시 roop 하는 배치파일을 실행시켜줌
단점. tomcat서버명령어창이 항상 열려있음(실수로 꺼버리면 서버 종료), 5초마다 pull 함(시간변경은가능)
@echo off
rem Git프로젝트 디렉토리로 이동
cd C:\Project\프로젝트폴더
rem Git pull 명령 실행
git pull
rem Maven 프로젝트를 빌드
call mvn clean package
echo Maven build completed.
rem 새로생성된 target 폴더로 이동
cd target
rem 생성된 WAR파일을 ROOT.war로 이름변경
ren GR_SEWER-1.0.0.war ROOT.war
rem 기존 톰캣폴더에 ROOT 폴더 삭제
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57\webapps\ROOT
rem 새로 생성된 ROOT.war파일을 강제 덮어씌우기
move /Y ROOT.war C:\SERVICE\apache-tomcat\8.5.57\webapps
rem 톰캣 bin 폴더로 이동
cd C:\SERVICE\apache-tomcat\8.5.57-DG\bin
rem
call startup.bat
rem startup
rem loop 시작
:loop
rem 프로젝트 폴더로 이동
cd C:\Project\프로젝트폴더
rem Git pull 명령 실행 및 실행결과를 변수에 담기
for /f %%A in ('git pull') do set "pull_result=%%A"
rem Git pull 결과 확인
echo %pull_result% | findstr /c:"Already up to date." > nul
rem Git pull 결과 확인
if "%pull_result%"=="Already" (
echo No changes found. No further action required.
)else (
echo Changes found. Proceeding with Maven build and Tomcat restart.
rem Maven build 실행
call mvn clean package
echo Maven build completed.
rem 배포실행
cd target
ren 프로젝트-1.0.0.war ROOT.war
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57\webapps\ROOT
move /Y ROOT.war C:\SERVICE\apache-tomcat\8.5.57\webapps
cd C:\SERVICE\apache-tomcat\8.5.57\bin
rem 8100 포트를 사용하는 Java 프로세스를 종료
start /wait cmd /c npx kill-port 8100
rem 톰캣 시작
cd C:\SERVICE\apache-tomcat\8.5.57\bin
call startup.bat
)
rem 5초 대기 후 다시 반복
timeout /t 5 /nobreak > nul
goto loop
bat을 exe파일로 변경 후 백그라운드에서 실행하게 함.
그럼 bat실행시 뜨는cmd 창 안볼수있음
cmd창을 백그라운드로 실행하는 방법도 있지만, 문제발생시 종료하려고할때 작업관리자에서는 cmd.exe로 뜨기때문에
어떤것인지 구별하기가 어려움 그래서 exe파일로 변환하면 파일명이 작업관리자에 뜨기때문에 쉽게 찾아서 종료가능
bat -> exe 파일첨부
보이는 응요프로그램 체크시 trojan 머시기 뜸
+) 서비스 등록 버전
service.bat 수정후
cmd 열고 service.bat install -> 서비스 등록
충돌원인은 톰캣 디렉터리내의 work 폴더(톰캣찌꺼기) 삭제해야함
@echo off
rem Git프로젝트 디렉토리로 이동
cd C:\Project\DG_SEWER
rem Git pull 명령 실행
git pull
rem Maven 프로젝트를 빌드
call mvn clean package
echo Maven build completed.
rem 새로생성된 target 폴더로 이동
cd target
rem 생성된 WAR파일을 ROOT.war로 이름변경
ren GR_SEWER-1.0.0.war ROOT.war
REM 서비스 중지
sc stop DG_AS
REM 3초대기
timeout /t 3
rem 기존 톰캣폴더에 ROOT 폴더 삭제
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57-DG\webapps\ROOT
rem 새로 생성된 ROOT.war파일을 강제 덮어씌우기
move /Y ROOT.war C:\SERVICE\apache-tomcat\8.5.57-DG\webapps
rem 톰캣 work폴더 삭제(톰캣찌꺼기)
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57-DG\work
rem 서비스 시작
sc start DG_AS
rem loop 시작
:loop
rem 프로젝트 폴더로 이동
cd C:\Project\DG_SEWER
rem Git pull 명령 실행 및 실행결과를 변수에 담기
for /f %%A in ('git pull') do set "pull_result=%%A"
rem Git pull 결과 확인
echo %pull_result% | findstr /c:"Already up to date." > nul
rem Git pull 결과 확인
if "%pull_result%"=="Already" (
echo No changes found. No further action required.
)else (
echo Changes found. Proceeding with Maven build and Tomcat restart.
rem Maven build 실행
call mvn clean package
echo Maven build completed.
REM 서비스 중지
sc stop DG_AS
REM 3초대기
timeout /t 3
rem 배포실행
cd target
ren GR_SEWER-1.0.0.war ROOT.war
rem 기존 톰캣폴더에 ROOT 폴더 삭제
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57-DG\webapps\ROOT
rem 새로 생성된 ROOT.war파일을 강제 덮어씌우기
move /Y ROOT.war C:\SERVICE\apache-tomcat\8.5.57-DG\webapps
rem 톰캣 work폴더 삭제(톰캣찌꺼기)
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57-DG\work
rem 서비스 시작
sc start DG_AS
)
rem 5초 대기 후 다시 반복
timeout /t 5 /nobreak > nul
goto loop
+ 스케쥴러를 통한 1회용 배포프로그램
아래프로그램을 스케쥴러에 1분 또는 원하는 시간마다 반복하게 등록시키면됨
@echo off
rem 프로젝트 폴더로 이동
cd C:\Project\DG_SEWER
rem Git pull 명령 실행 및 실행결과를 변수에 담기
for /f %%A in ('git pull') do set "pull_result=%%A"
rem Git pull 결과 확인
echo %pull_result% | findstr /c:"Already up to date." > nul
rem Git pull 결과 확인
if "%pull_result%"=="Already" (
echo No changes found. No further action required.
)else (
echo Changes found. Proceeding with Maven build and Tomcat restart.
rem Maven build 실행
call mvn clean package
echo Maven build completed.
REM 서비스 중지
sc stop DG_AS
REM 3초대기
timeout /t 3
rem 배포실행
cd target
ren GR_SEWER-1.0.0.war ROOT.war
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57-DG\webapps\ROOT
move /Y ROOT.war C:\SERVICE\apache-tomcat\8.5.57-DG\webapps
cd C:\SERVICE\apache-tomcat\8.5.57-DG\bin
rem 톰캣 work폴더 삭제(톰캣찌꺼기)
rmdir /s /q C:\SERVICE\apache-tomcat\8.5.57-DG\work
rem 서비스 시작
sc start DG_AS
)
반응형
'DevOps > 🌌 Git' 카테고리의 다른 글
GitLab | 초간단 Git 브렌치 전략 (0) | 2024.09.29 |
---|---|
Git | 특정브렌치만 clone하는법 (0) | 2024.03.13 |
GIT | GitHUB,README.md,마크다운,push,.gitignore,pull,fetch,reset,revert (0) | 2022.11.01 |
GIT | CMDER (0) | 2022.11.01 |