月度存档: 四月 2010

部署脚本A

#!/bin/sh -x

SVNROOT="http://172.16.24.11/mc/accessplatform/cixml/tags/"
DATE=`date +%Y%m%d%H%M%S`
DISTFILE="${DATE}.tgz"
APPLICATION="cixml"
DEPLOY_TO_ROOT="/usr/local"
DEPLOY_TO="${DEPLOY_TO_ROOT}/${APPLICATION}"
JUMPHOST="121.52.216.20"
DISTHOST="9161"

COMMANDLIST="tar zxf /tmp/${DISTFILE} -C ${DEPLOY_TO}/releases && ln -shf ${DEPLOY_TO}/releases/${DATE} ${DEPLOY_TO}/current"
ROLLBACK_COMMAND="cd ${DEPLOY_TO}/releases && /bin/ls -r | head -1 | xargs rm -vrf && /bin/ls -r | head -1 | xargs -t -I {} ln -shf ${DEPLOY_TO}/releases/\\\"{}\\\" ${DEPLOY_TO}/current && echo Current Release Version: && cat ${DEPLOY_TO}/current/TAGS"
EXTRA_COMMAND=""

[ $# -eq 1 ] || {
   echo "usage: $0 (tagname|setup|rollback)"
   exit 1
}

if [ $1 = "setup" ]
then
   for DHOST in ${DISTHOST}
   do
       ssh ${JUMPHOST} "ssh localhost -p ${DHOST} \"sudo mkdir -pv ${DEPLOY_TO}/releases && sudo chown -R mc:wheel ${DEPLOY_TO}\""
   done
   exit 0
fi

if [ $1 = "rollback" ]
then
   for DHOST in ${DISTHOST}
   do
       ssh ${JUMPHOST} "ssh localhost -p ${DHOST} \"${ROLLBACK_COMMAND}\""
   done
   exit 0
fi

SVNPATH=${SVNROOT}${1}
TMPDIR="/tmp/"

# CHECK SVN URL
svn info ${SVNPATH} | grep ${1} || {
   echo "SVN URL not exsit"
   exit 1
}

# CHECK REMOTEHOST HAS BEEN CREATE DIR
for DHOST in ${DISTHOST}
do
    ssh ${JUMPHOST} "ssh localhost -p ${DHOST} \"[ -d ${DEPLOY_TO}/releases ]\"" || exit 1
done

# CHECKOUT FROM SVN
svn export ${SVNPATH} ${TMPDIR}${DATE} || {
    echo "SVN Export Error"
    exit 1
}

# TAR PACKAGE
cd ${TMPDIR}
echo ${1} > ${DATE}/TAGS
tar zcf ${DISTFILE} ${DATE}

# CREATE JUMP SCRIPTS
echo "#!/bin/sh" >> ${DATE}.sh

for DHOST in ${DISTHOST}
do
   echo "scp -P ${DHOST} ${DISTFILE} localhost:/tmp/ || {" >> ${DATE}.sh
   echo "    echo \"SCP TO ${DHOST} Error\"" >> ${DATE}.sh
   echo "    exit 1" >> ${DATE}.sh
   echo "}" >> ${DATE}.sh
   echo "ssh localhost -p ${DHOST} \"${COMMANDLIST}\" || {" >> ${DATE}.sh
   echo "    echo \"HOST ${DHOST} EXEC COMMAND ERROR\"" >> ${DATE}.sh
   echo "    exit 1" >> ${DATE}.sh
   echo "}" >> ${DATE}.sh
   [ -z "${EXTRA_COMMAND}" ] || echo "ssh localhost -p ${DHOST} \"sudo ${EXTRA_COMMAND}\"" >> ${DATE}.sh
done

# SCP PACKAGE&SCRIPTs TO JUMPHOST  
scp ${DISTFILE} ${DATE}.sh ${JUMPHOST}:~/ || {
    echo "SCP TO JUMPHOST Error"
    exit 1
}

# EXEC SCRIPTS TO DEPLOY PACKAGE
ssh ${JUMPHOST} "sh -x ${DATE}.sh"

# REMOVE TEMPFILE
ssh ${JUMPHOST} "rm -f ~/${DATE}.sh ~/${DATE}.tgz"
rm -rf ${DATE}
rm -rf ${DATE}.tgz
rm -rf ${DATE}.sh