Deploy tomcat cluster project using fabric

References:

【1】 http://python.jobbole.com/87241/

 

1. Introduction to Fabric:

Fabric is a Python library that provides a rich interface for interacting with SSH, which can be used to automate and streamline the execution of Shell commands on local or remote machines. Therefore, it is very suitable for remote deployment and system maintenance of applications. It is also extremely easy to get started, all you need is to know the basic shell commands.

2. Fabric installation:

 

#!/bin/bash

#create by huangdengji
#version:1.0
#create time:2017-09-27 15:22:00
#email:[email protected]

#description: install fabric
#1.install python2.7.14
#2.install pip
#3.install fabric

set -m

#install dependencies
yum -y install wget gcc openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
cd /home/hdj/
[ -d /home/hdj/fabric ] && {
        rm -rf /home/hdj/fabric
}
mkdir fabric
cd fabric
#Install Python2.7
wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz
tar -xvf Python-2.7.14.tgz
cd Python-2.7.14
./configure --prefix=/usr/local/python2.7
make
make install
/usr/local/python2.7/bin/python2.7 -V
[$? -ne 0] && {
        echo 'python 2.7 install fail'
        exit 1
}
ln -fs /usr/local/python2.7/bin/python2.7 /usr/bin/python
#Since yum depends on Python2.6, the yum file needs to be modified
yumFirstLine=`head -n 1 /usr/bin/yum`
[ ${#yumFirstLine} -eq 17 ] && {
        sed -i 's#/usr/bin/python#/usr/bin/python2.6#g' /usr/bin/yum
        echo 'modify /usr/bin/yum first line to /usr/bin/python2.6'
}
echo '------------------------------------------------------------------------------------------------------------------'
echo ''
echo ''
echo ''
echo ''
echo ''
echo 'python 2.7 install success'
echo ''
echo ''
echo ''
echo ''
echo ''
echo '------------------------------------------------------------------------------------------------------------------'
#install pip
cd ..
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
#install fabric
pip install fabric
ln -s /usr/local/python2.7/bin/fab /usr/bin/fab
echo '------------------------------------------------------------------------------------------------------------------'
echo ''
echo ''
echo ''
echo ''
echo ''
echo 'fab install success'
echo ''
echo ''
echo ''
echo ''
echo ''
echo '------------------------------------------------------------------------------------------------------------------'

 3. Write a local packaging shell script

 

 

#!/bin/bash

#create by huangdengji
#version:2.0
#create time:2017-09-25 18:22:00
#email:[email protected]

#description:do repackage project to tar.gz

set -m

projectName="ROOT"
tomcatDir="/resources/apache-tomcat-6.0.41/webapps/"


cd ${tomcatDir}
rm -rf ${projectName}.tar.gz
tar -zcf ${projectName}.tar.gz ${projectName}

 4. Write a shell script that redeploys the project in the remote server

 

 

#!/bin/bash

#create by huangdengji
#version:1.0
#create time:2017-09-12 18:22:00
#email:[email protected]

#description:do reploy tomcat project

set -m

source /etc/profile
tomcatName='apache-tomcat-6.0.41'
projectName='ROOT'
deployEndTag='.tar.gz'
deployName=${projectName}${deployEndTag}


projectDir='/u0/'${tomcatName}'/webapps/'
# str = `ps -ef | grep $ {tomcatName} `
str = `ps -ef | grep $ {tomcatName} | grep -v grep | grep -v tail`
pid=`echo $str | awk '{print $2}'`
echo ${tomcatName}' pid:'${pid}

[ -f /home/hdj/${deployName} ] || {
    echo '/home/hdj/'${deployName}' not exist'
    exit 1
}

kill -9 ${pid}
if [ $? -eq 0 ]
then
    echo "kill tomcat success!"
else
    echo "kill tomcat fail!"
be

sleep 3

while true
do
    count = `ps -ef | grep $ {tomcatName} | grep -v grep | grep -v tail | wc -l`
    [ ${count} -eq 0 ] && {
        break
    } && {
        kill -9 ${pid}
        sleep 1
    }
done


#path='/project_bak/'$(date +%Y%m%d%H%M)
path='/project_bak/'

if [ -d ${path} ]
then
    rm -rf ${path}
    mkdir -p ${path}
else
    mkdir -p ${path}
be

if [ -d ${path} ]
then
    echo 'created dir:'${path}' success!'
else
    echo 'created dir:'${path}' fail!'
    exit 1
be


if [ -d ${projectDir}${deployName} ]
then
    mv ${projectDir}${deployName} ${path}
    if [ $? -eq 0 ]
    then
        echo 'project back to dir:'${path}' success!'
    else
        echo 'project back to dir:'${path}' fail!'
        exit 1
    be
else
    echo ${projectDir}${deployName}' is first depoly'
be


mv /home/hdj/${deployName} ${projectDir}
if [ $? -eq 0 ]
then
    echo 'deplory project to dir:'${projectDir}' success!'
else
    echo 'deplory project to dir:'${projectDir}' fail!'
    exit 1
be


cd ${projectDir}

rm -rf ${project}


tar -zxf ${deployName}

/u0/${tomcatName}/bin/startup.sh
echo 'starting '${tomcatName}' ...'

 5. Write the Python script executed by the fabric to realize multi-server: local code packaging, uploading to remote server, remote service restart

 

#!/usr/bin/env python
# encoding: utf-8

from fabric.api import local,cd,run,env,put,sudo

env.hosts=['[email protected]:22','[email protected]:22','[email protected]:22'] #Parameters used by ssh
env.password = '111111'
tomcatName='apache-tomcat-6.0.41'
projectName='ROOT'


def local_package():
    local('sh /home/hdj/fab_task/repackage.sh')
    put('/resources/'+tomcatName+'/webapps/'+projectName+'.tar.gz', '/home/hdj/')
def update_to_remote():
    print "remote update"
    with cd('/home/hdj'): #cd is used to enter a directory
        run('sh redeploy.sh') #run for remote operation

def update():
    local_package()
    update_to_remote()

 

 6. Execute the fab command to complete batch deployment

fab -f redeploy.py update

 

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326337961&siteId=291194637