佘小宝的爹 发表于 2018-9-4 10:02:27

svn钩子(POST-COMMIT)+jenkins 代码上线流程

REPOS="$1"  
REV="$2"
  
LANG=en_US.UTF-8
  
LOGFILE=/var/log/svn.log    # 钩子脚本的日志
  

  
# 脚本的标准输出和标准错误输出都打印到日志文件里
  
exec 1>>"$LOGFILE"
  
exec 2>&1
  

  
SVNLOOK=/usr/bin/svnlook
  
TIME=$(date "+%Y-%m-%d %H:%M:%S")
  
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")#提交作者
  
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合
  
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")    #提交时的备注信息,不建议用中文
  

  
# SVN客户端配置,需要自行修改**********************************
  
CLIENTSVNROOT=/data/www    #WEB服务器的代码根目录
  
SVNUSER="tiantian"
  
SVNPASSWD="123456"
  
#**************************************************************
  

  
function myecho() {
  
    echo "$TIME" "$*"
  
}
  

  
myecho "**************************************************************"
  
myecho "提交版本:$REV 作者:$AUTHOR"
  
myecho "提交备注:$MESSAGE"
  
myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')"
  

  
MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)#CHANGEDDIRS里的主目录
  
# 遍历提交的代码目录,同步到WEB服务器上
  
while [ "$CHANGEDDIRS" != "" ];do
  
    PROJECT=$(echo $MASTERDIR | awk -F / '{print $1}')
  
    # 判断项目文件夹
  
    if [ "$PROJECT" == "php" ];then
  
      myecho
  
      myecho "项目:$PROJECT 同步目录:$MASTERDIR"
  
      myecho "同步 $MASTERDIR 到 $CLIENT1:$CLIENTSVNROOT/$MASTERDIR"
  
      # 无密码ssh连接到客户端服务器,执行svn up
  
       SVN=/usr/bin/svn
  
      svn up --non-interactive --username $SVNUSER --password $SVNPASSWD /$CLIENTSVNROOT/$MASTERDIR
  
   if [ $? -eq 0 ]
  
      then
  
      /usr/bin/rsync -az --delete $CLIENTSVNROOT /tmp/#临时目录
  
      fi
  

  

  
    elif [ "$PROJECT" == "tianshi" ];then
  
      myecho
  
      myecho "项目:$PROJECT 同步目录:$MASTERDIR"
  
      myecho "同步 $MASTERDIR 到 $CLIENT2:$CLIENTSVNROOT/$MASTERDIR"
  
       svn up --non-interactive --username $SVNUSER --password $SVNPASSWD /$CLIENTSVNROOT/$MASTERDIR
  
   if [ $? -eq 0 ]
  
      then
  
      /usr/bin/rsync -az --delete $CLIENTSVNROOT /tmp/   #临时目录
  
      fi
  
    else
  
      :
  
    fi
  
    # 在目录集合里删除已经同步好的目录
  
    CHANGEDDIRS=$(echo "$CHANGEDDIRS" | grep -v "^$MASTERDIR")
  
    # 获取新的需要同步的主目录
  
    MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)
  
done
  

  
别忘了给钩子授权chmod 755 post-commit


页: [1]
查看完整版本: svn钩子(POST-COMMIT)+jenkins 代码上线流程