반응형
스프링 레거시 기반 프로젝트를 war로 묶어서 테스트 서버에 배포하고 있습니다. 배포 방식은 단순무식하게 파일질라로 war를 업로드해 압축을 풀어주는 방식입니다.
하루에도 몇 번씩 똑같은 작업을 반복하며 이런 무식한 배포 방식이 왜 나쁜지 알아가던 중... 그래도 Shell Script를 써서 단순 작업은 조금이나마 줄여보고자 Shell Script를 처음 찾아보게 되었습니다. Shell Script의 활용은 무궁무진하겠으나, 처음 접해보시는 분들이 실습해보기에 아래 정도 수준의 스크립트면 괜찮을 거 같습니다.
먼저 vi 명령어로 test_deploy라는 파일을 만들어줍니다.
vi test_deploy
insert를 누르면 작성할 수 있습니다.
// 다음과 같이 쉘 스크립트문이라고 선언해줍니다.
#!/bin/sh
// 파일질라로 test.war를 업로드해줄 경로에 test.war가 존재하는지 확인합니다.
// if문에서 괄호 앞뒤 등 각종 띄어쓰기에 주의해야합니다.
if [ -f /home/project/test.war ]; then
// 파일이 존재한다면 echo를 이용해 다음 문구를 출력해줍니다. sysout 같은 거라고 이해했습니다.
echo "Start Deploy"
else
// 파일이 없으면 파일을 올리라고 알려줍니다.
echo "You must upload admin.war at /home/onemall/ "
// 파일이 없으면 exit로 쉘스크립트를 종료합니다.
//exit 뒤의 숫자는 쉘 스크립트가 종료된 후 출력해줄 데이터입니다. 0~255까지 가능하고 보통 0은 성공, 나머지는 에러코드로 이용한다고 합니다.
exit 1
fi // if문을 종료시킵니다.
// 톰캣이 현재 구동 중인지 확인하기 위해 tc_cnt 변수에 구동 중인 톰캣의 수를 담아줍니다.
#tc_cnt='ps -ef|grep tomcat|grep -v grep|grep -v vi|wc -l'
// $뒤에 변수 이름을 사용해서 변수를 불러올 수 있습니다.
#if [ $tc_cnt -gt 0 ]; then
// 구동 중인 톰캣이 있으면 꺼줍니다. tc_shutdown.sh는 제가 지정한 명령입니다.
tc_shutdown.sh
echo "Tomcat Server Shutdown"
#else
# echo "Tomcat not Running"
#fi
// 이 부분은 주석을 해제하고 돌려보지 않아서 제대로 동작하는지 모르겠습니다.
// 기존의 test 프로젝트가 배포되어 있는 폴더를 삭제해줍니다. -rf로 폴더 이하의 모든 파일을 삭제합니다.
rm -rf /home/project/htdocs/test/
echo "remove origin test"
// 지금까지 root 권한으로 진행했고 test 프로젝트를 담당할 유저인 test로 폴더를 만들어주겠습니다.
// su [계정] -c "명령"
// 한 번에 여러 개의 명렁을 내릴 땐 "명령; 명령"처럼 세미콜론으로 구분해줍니다.
su test -c "mkdir /home/project/htdocs/test"
echo "Make admin folder"
// 해당 파일이 경로에 존재하는지 한번 더 확인했습니다. 굳이 할 필요는 없을 것 같긴 합니다.
if [ -f /home/project/test.war ]; then
// war파일을 tomcat이 바라보는 경로로 옮겨줬습니다.
su test -c "mv /home/project/test.war /home/project/htdocs/test"
// server.xml에서 자동 압축 해제 옵션을 false로 해놔서 수동으로 풀어줬습니다.
su test -c "unzip /home/project/htdocs/test/test.war -d /home/project/htdocs/test"
echo "unzip test.war"
//톰캣 구동 권한을 가진 root로 톰캣을 구동시켜줬습니다.
tc_startup.sh
echo "Tomcat Server Start"
else
echo "file not exist"
fi
작성이 끝나면 esc를 누르고 :wq를 입력해서 작성 후 종료 명령을 내립니다.
쉘스크립트 실행은 source test_deploy.sh 로 합니다.
처음 짜본 Shell Script였습니다. 좀 더 깊고 다양하게 알 게 되면 많이 활용할 수 있을 것 같네용.
반응형