-
[Jenkins] war 파일 빌드 배포 설정AWS, Infra/Jenkins 2022. 4. 8. 13:50
들어가면서..
Git의 소스가 수정되어 배포해야 하는 경우가 있다.
이때 배포 자동화 를 위해서 젠킨스 를 사용한다.프로세스
- 젠킨스 workspace에서 clean을 하고, git에 있는 소스를 package를 하여 배포할 war파일을 얻는다.
- 이 war 파일을 sshpass를 통해서, was로 전달하는 방식이다.
- 이때, 톰켓을 restart 시켜준다.
참고) 무중단 배포 를 위해서는 하드웨어적으로 가능하며, AWS EC2를 2개 를 두어 이중화 를 해주면 가능하다.
프로젝트 경우에 따라서, 파이프 라인 설정이 필요할 수도 있다.
필요한 String Parameter
- WAS_IP
- WAS_ID
- WAS_PWD
- SSH_PORT
1. Maven clean
clean
2. 젠킨스 디렉토리 클린처리
SERVICE_WEBAPP_TARGET='/var/lib/jenkins/workspace/example-api/target' # 0. Clear Jenkins webapp target echo ">>> Clear Jenkins webapp target -- START" # if Refresh Directory, do refresh [[ -d ${SERVICE_WEBAPP_TARGET} ]] && echo "Directory exist"; rm -rf ${SERVICE_WEBAPP_TARGET}; echo ">>> Done. Refresh ${SERVICE_WEBAPP_TARGET}" || echo ">>> not exist ${SERVICE_WEBAPP_TARGET}" echo ">>> Clear Jenkins webapp target -- DONE"
3. Maven Package
package
4. 현재 war파일 백업
# 1. Backup WAS's war DATE=$(date '+%Y%m%d') WAR_FILE=/home/was/app/webapps/ROOT.war NEW_WAR_FILE=/home/was/app/backup/ROOT'_'$DATE.war echo ">>> Backup WAS's war -- START" sshpass -p $WAS_PWD ssh $WAS_ID@$WAS_IP -p$SSH_PORT -oStrictHostKeyChecking=no cp $WAR_FILE $NEW_WAR_FILE echo ">>> Backup WAS's war -- DONE"
5. 젠킨스에서 빌드한 파일을 WAS 서버에 전송
# 2. Jenkins API ROOT.war send to Was Server SERVICE_WEBAPP_TARGET=/var/lib/jenkins/workspace/example-api/target echo ">>> Jenkins API ROOT.war send to Was Server -- START" mv $WORKSPACE/target/*.war $WORKSPACE/target/ROOT.war sshpass -p $WAS_PWD scp -o StrictHostKeyChecking=no -P $SSH_PORT $SERVICE_WEBAPP_TARGET/*.war $WAS_ID@$WAS_IP:/home/example-api/app/webapps/ echo ">>> Jenkins API ROOT.war send to Was Server -- DONE"
6. Tomcat 재시작
- 메모리가 해제되었다가, 재시작하기 위해서 10초의 간격을 줌. (restart.sh)
# 3. WAS Tomcat Restart TOMCAT_HOME=/home/was/tomcat-8080 TOMCAT_RESTART=$TOMCAT_HOME/bin/restart.sh echo ">>> Was Tomcat Restart -- START" sshpass -p $WAS_PWD ssh $WAS_ID@$WAS_IP -p$SSH_PORT -oStrictHostKeyChecking=no sh ${TOMCAT_RESTART} echo ">>> Was Tomcat Restart -- DONE"
참고
- restart.sh
tomcat_home=/home/was/tomcat-8080 tomcat_shutdown=/home/was/tomcat-8080/bin/shutdown.sh tomcat_start=/home/was/tomcat-8080/bin/startup.sh export LANG=ko_KR.UTF-8 echo "Line:${LINENO} > Shutdown tomcat now...." bash ${tomcat_shutdown} echo "Line:${LINENO} > tomcat is now terminated..." sleep 3 if [ -z "`ps -eaf | grep java | grep /WAS/apache-tomcat-9.0.19/bin`" ]; then echo "Line:${LINENO} > Tomcat was terminated successfully." else ps -eaf | grep java | grep ${tomcat_home}/bin | awk '{print $2}' | while read PID do echo "Line:${LINENO} > Killing $PID... " kill -9 $PID echo "Line:${LINENO} > Tomcat is being shutdowned" done fi echo "Line:${LINENO} > tomcat restart now" bash ${tomcat_start} if [ -z "`ps -eaf | grep java | grep ${tomcat_home}/bin`" ]; then echo "Line:${LINENO} > Error!!! Cannot start tomcat server." else echo "Line:${LINENO} > Tomcat restart succcessfully. " fi echo "Line:${LINENO} > Job finished"
반응형'AWS, Infra > Jenkins' 카테고리의 다른 글
[Jenkins] Github 설정 파일, 접속 정보를 배포 시에 변경하자 (sed 명령어) (0) 2022.06.26