들어가면서..
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 |
---|
댓글