2019년 6월 25일 화요일

shell script 자동 배포 (auto deploy)

목적
1. 첫 번째(이하 배포서버) 서버에 배포를 한 후 순차적으로 늘어나는 서버에들에 대해서는 자동 배포
2. 자동 배포하였을 시에 ip 기반으로 순차적으로 늘어 난다는 가정
3. 배포 완료 후 재기동 까지 해야 정상 처리

아래에 스크립트를 보면 복잡해 보이지만 그렇지 않다. (단순 tomcat deploy)
단순히 배포 서버에 디플로이가 정상이 되면 그 이후부터는 ping테스트하여 복제되는 서버에 대해서는 자동으로 배포 후 끝나는 것이 목표 였다.

주석을 쉬운 영어로 표기 했으니 이정도면 이해가 어렵진 않을 것 같다. 


#/bin/bash

DATE=`date +%Y%m%d%H%M%S`
sub1=192; sub2=168; sub3=15; sub4=100
USER=wasuser
PASSWD=wasuser
WARNAME="test.war"

APPDIR="/opt/was/app"
SERVER_BASE="/opt/was/servers/tomcat8_21"
SSHOPTION="-oStrictHostKeyChecking=no"

SOURCE=$sub1.$sub2.$sub3.$sub4;
TARGET=$SOURCE
echo "#############################################################";
echo "# INFO result [0] = SUCCESS or result [NOT 0] = FAIL ";
echo "# 0-0 $SOURCE SERVER APPLICATION GET THIS SERVER";
sshpass -p $PASSWD scp $USER@$SOURCE:/tmp/$WARNAME /tmp/$WARNAME ;
echo "# 0-0 Result: $?";
echo ""
echo "#############################################################";
echo "# CHECK WITH PING TO TARGET SERVER ";
echo "#############################################################";

while true
do
  cnt=1;
  sub4=`expr $sub4 + 100`;
  TARGET=$sub1.$sub2.$sub3.$sub4;
    ping -c 1 -w 1  $TARGET >/dev/null 2>&1;
    if [ $? -ne 0 ]; then
    echo "#############################################################";
    echo "# NO LONGER TARGET: $TARGET ";
    echo "#############################################################";
        sleep 1;
      break;
    else
    echo "# TARGET [$cnt]: $TARGET ";
    echo "";
   
    echo "# TASKS Start ";
   
    echo "# 1-1 TARGET $TARGET [$cnt] APPLICATION BACKUP[move] ";
    sshpass -p $PASSWD  ssh $SSHOPTION $USER@$TARGET mv $APPDIR/test.war $APPDIR/test.war.$DATE;
    echo "# 1-2 Result: $?";
    echo ""
   
    echo "# 2-1 THIS SERVER to $TARGET [$cnt] SERVER APPLICATION COPY ";
    sshpass -p $PASSWD  scp /tmp/$WARNAME $USER@$TARGET:$APPDIR/$WARNAME;
    echo "# 2-2 Result: $?";
    echo ""
   
    echo "# 3-1 $TARGET [$cnt] SERVER Shutdown ";
    sshpass -p $PASSWD  ssh -t $SSHOPTION $USER@$TARGET "cd $SERVER_BASE/bin; sudo -u $USER ./kill.sh";
    echo "# Result: $?";
    echo ""
   
    echo "# 4-1 $TARGET [$cnt] SERVER Startup ";
    sshpass -p $PASSWD  ssh -t $SSHOPTION $USER@$TARGET "cd $SERVER_BASE/bin; sudo -u $USER ./start.sh notail";
    echo "# Result: $?";
    echo ""
    echo "# TASKS END";
        sleep 1;
      cnt=$((cnt + 1));
    fi
  echo "-------------------------------------------------------------";
    sleep 1;
   
done

댓글 없음:

댓글 쓰기