#!/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
月度存档: 四月 2010
部署脚本A
作者: 五
日期: 2010年04月6日
没有评论