1. 程式人生 > >自動下載原始碼_並編譯_打包_部署_重啟服務的Shell指令碼

自動下載原始碼_並編譯_打包_部署_重啟服務的Shell指令碼

完整版見https://jadyer.github.io/2015/06/03/linux-shell-deploy/
#!/bin/sh
APP_NAME=engine
APP_WARS=JadyerEngine-web/target
APP_PATH=/app/tomcat-6.0.43
APP_CODE=sourcecode
SVN_URL=https://svn.sinaapp.com/jadyer/2/repository/JadyerEngine
[email protected]
SVN_PSWD=玄玉

appPID=0
getAppPID(){
    pidInfo=`ps aux|grep java|grep $APP_PATH|grep -v grep`
    if [ -n "$pidInfo" ]; then
        appPID=`echo $pidInfo | awk '{print $2}'`
    else
        appPID=0
    fi
}

downloadAndCompileSourceCode(){
    cd $APP_PATH
    mkdir $APP_CODE
    svn --username $SVN_USER --password $SVN_PSWD checkout $SVN_URL $APP_CODE
    cd $APP_CODE
    mvn clean package -DskipTests
}

shutdown(){
    getAppPID
    echo "[玄玉] ========================================================================================================"
    if [ $appPID -ne 0 ]; then
        echo -n "[玄玉] Stopping $APP_PATH(PID=$appPID)..."
        kill -9 $appPID
        if [ $? -eq 0 ]; then
            echo "[Success]"
            echo "[玄玉] ========================================================================================================"
        else
            echo "[Failed]"
            echo "[玄玉] ========================================================================================================"
        fi
        getAppPID
        if [ $appPID -ne 0 ]; then
            shutdown
        fi
    else
        echo "[玄玉] $APP_PATH is not running"
        echo "[玄玉] ========================================================================================================"
    fi
}

deploy(){
    cd $APP_PATH/webapps/
    rm -rf $APP_NAME
    rm -rf $APP_NAME.war
    cp $APP_PATH/$APP_CODE/$APP_WARS/*.war $APP_NAME.war
    cd $APP_PATH/logs/
    rm -rf *
    cd $APP_PATH
    rm -rf $APP_CODE
}

startup(){
    cd $APP_PATH/bin
    ./startup.sh
    tail -100f ../logs/catalina.out
}

downloadAndCompileSourceCode
shutdown
deploy
startup

上面的指令碼在執行的過程中,若Ctrl+C退出後,會導致應用部署失敗,故編寫了下面這個可在後臺執行的指令碼

不想用下面這個指令碼也可以,只是在執行上面的指令碼時直接[nohup ./deploy-engine.sh &]就行了

即便如此,個人仍推薦只用上面的指令碼就夠了(如果是你自己用的話)!!

#!/bin/sh
APP_LOGS=/app/tomcat-6.0.43/logs
SHELL_NAME=bin/deploy-engine.sh

shellPID=0
getShellPID(){
    pidInfo=`ps aux|grep $SHELL_NAME|grep -v grep`
    if [ -n "$pidInfo" ]; then
        shellPID=`echo $pidInfo | awk '{print $2}'`
    else
        shellPID=0
    fi
}

shutdown(){
    getShellPID
    echo "[玄玉] ========================================================================================================"
    if [ $shellPID -ne 0 ]; then
        echo -n "[玄玉] Stopping $SHELL_NAME(PID=$shellPID)..."
        kill -9 $shellPID
        if [ $? -eq 0 ]; then
            echo "[Success]"
            echo "[玄玉] ========================================================================================================"
        else
            echo "[Failed]"
            echo "[玄玉] ========================================================================================================"
        fi
        getShellPID
        if [ $shellPID -ne 0 ]; then
            shutdown
        fi
    else
        echo "[玄玉] $SHELL_NAME is not running"
        echo "[玄玉] ========================================================================================================"
    fi
}

#[2>&1]表示把標準錯誤(stderr)重定向到標準輸出(stdout),否則會提示[nohup: redirecting stderr to stdout]
startupByNohup(){
    cd $APP_LOGS
    rm -rf nohup.log
    nohup ../$SHELL_NAME > nohup.log 2>&1 &
    sleep 1
    tail -100f nohup.log
}

shutdown
startupByNohup