SVN自动部署脚本

    xiaoxiao2021-12-14  55

    #!/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

    转载请注明原文地址: https://ju.6miu.com/read-970708.html

    最新回复(0)