SVN自动部署脚本

#!/bin/sh
# POST-COMMIT HOOK
# ... 省略
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
# mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
echo -e "[1 fo 6]================================\n`date`:这次更新将发布到测试和WEB。" 1>&2
# 库的路径
REPOS="$1"
# 新提交的版本号
REV="$2"
changed=$(svnlook changed -r $REV $REPOS)
echo $changed > /home/svn/hooks/last_changed
echo $REPOS >> /home/svn/hooks/last_changed
echo $REV >> /home/svn/hooks/last_changed
######################################################################################
# 配置自动发布到WEB服务器 编辑 post-commit 文件 ######################################
######################################################################################
# -------------------------------------------------------------------------------
# Filename:    post-commit
# Description: WEB server with synchronization code by SVN
# -------------------------------------------------------------------------------
#Version 1.1
#当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。
#Set variable
SVN=/svn/ygjk/repo
SVNUSER=adminsvn 
SVNPASD=admin@ygjk
# 测试服务器路径
WEB1=/var/www/html/ygjk
#WEB2=/home/ftp/c/customer/wwwroot
# 远端服务器IP
WEBIP="120.26.64.214"
# 同步方式
RSYNC=rsync
# 同步日志
LOG=/svn/ygjk/post-commit.log
# 避免乱码
export LANG=en_US.UTF-8
mkdir -p $SVN
#更新文件到本地文件夹
svn update $WEB1  --username $SVNUSER --password $SVNPASD
#svn update $WEB2  --username $SVNUSER --password $SVNPASD
# 必须要检出成功才开始执行下面的 #####################################################
if [ $? == 0 ]
then
    echo -e "[2 fo 6]================================\n`date`:文件顺利检出到测试项目。" 1>&2
######################################################################################
# 这里是解析本次操作的文件名 用于提高修改权限的速度 ##################################
######################################################################################
    echo -e "[3 fo 6]================================\n`date`:正在改变文件归属,为上传到WEB服务器准备。" 1>&2
    str=$changed
    # 字符串变成类似数组的东西,下面的for可以一次打印一个出来
    var=`echo $str | awk -F',' '{print $0}' | sed "s/,/ /g"`
    # list为文件名和SVN标记码一次搞一个出来
    for list in $var
    do
        # 获取每次list字符串的长度
        filesneme_len=`expr length $list`
        # 这个if对长度小于1的文件名过滤掉>符号需要转义
        if [ "$filesneme_len" \> "1" ]
        then
            # 这里取得的是字符串的第一个/前后的字符串 分别为仓库名字和带路径文件名
            #echo 仓库:${list%%/*}
            #echo 文件:/${list#*/}
            # 根据仓库名字给文件分派权限
            if [ "${list%%/*}" == "ygjk" ]
            then
                #设定检出文件为用户组1
                echo 设定检出文件为用户组1
                echo 仓库:${list%%/*}
                echo 文件:/${list#*/}
                chown 1000:1100 $WEB1/${list#*/}
                # 只同步修改的内容
                rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/${list#*/}" "root@$WEBIP:$WEB1\_svn/${list#*/}" >> $LOG
            fi
             


          #  if [ "${list%%/*}" == "customer" ]
          #  then
           #     #设定检出文件为用户组2
           #    echo 设定检出文件为用户组2
           #     echo 仓库:${list%%/*}
           #    echo 文件:/${list#*/}
           #    chown 1002:1100 $WEB2/${list#*/}
           #    # 只同步修改的内容
           #     rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list #"$WEB2/${list#*/}" "root@$WEBIP:$WEB2\_svn/${list#*/}" >> $LOG
           # fi
        fi
    done
    echo -e "[4 fo 6]================================\n`date`:文件归属修改完成。" 1>&2
 
######################################################################################
# 记录日志和上传文件 #################################################################
######################################################################################
 
    echo ""     >> $LOG;echo `date` >> $LOG;echo "##############################" >> $LOG
# 修改新检出文件的权限
# chown -R 1000:1100 $WEB
# chown -R 1002:1100 $WEB2
#同步代码从SVN服务器到WEB服务器 通过RSYNC
#$RSYNC -vaztpH  --timeout=90   --exclude-from=$SVN/exclude.list $WEB root@$WEBIP:$WEB/ >> $LOG
    echo -e "[5 fo 6]================================\n`date`:正上传到WEB服务器,并检查文件完整。" 1>&2
 
    # 同步完整内容 如目录删除文件删除之类..
    rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/" "root@$WEBIP:$WEB1\_svn/" >> $LOG
    #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/" "root@$WEBIP:$WEB2\_svn/" >> $LOG
    echo -e "[6 fo 6]================================\n`date`:代码已经发布到远端WEB。" 1>&2


fi
# 利用钩子错误退出 输出过程信息

exit 1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值