ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Jenkins] war 파일 빌드 배포 설정
    AWS, Infra/Jenkins 2022. 4. 8. 13:50

    들어가면서..

    Git의 소스가 수정되어 배포해야 하는 경우가 있다.
    이때 배포 자동화 를 위해서 젠킨스 를 사용한다.

    프로세스

    1. 젠킨스 workspace에서 clean을 하고, git에 있는 소스를 package를 하여 배포할 war파일을 얻는다.
    2. 이 war 파일을 sshpass를 통해서, was로 전달하는 방식이다.
    3. 이때, 톰켓을 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"
    반응형
Designed by Tistory.