SVN利用钩子同步网站部署

2026-04-14 02:32:27 237
分类:Linux

SVN通过钩子同步网站部署

web目录:/hoem/www/project 

svn版本库目录:/svn/project

1.cd /svn/project/hooks

20170504101345176.png

2.通过模板新建post-commit,执行vim post-commit 内容如下

# mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

export.UTF-8

REPOS="$1"  # 仓库的路径
REV="$2"    # 新提交的版本号

SVNLOOK=/usr/bin/svnlook
LOGFILE=/var/svn/svnrepos/svn.log

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

SVNUSER=huangfei
SVNPASSWD=hf123456

AUTHOR=$($SVNLOOK author -r $REV "$REPOS")  #提交作者
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")    #提交时的备注信息,不建议用中文

CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合
MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)  #CHANGEDDIRS里的主目录
PROJECT=$(echo $MASTERDIR | awk -F / '{print $1}')  #工程目录

# TIME=$(date "+%Y-%m-%d %H:%M:%S")
# echo "提交版本:$REV 作者:$AUTHOR 时间:$TIME"
# echo "提交备注:$MESSAGE" >> $LOGFILE
# echo "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')"
# echo "部署目录:$PROJECT"

WEB_PATH="/home/www/"$PROJECT
svn update $WEB_PATH --username $SVNUSER --password $SVNPASSWD

模板2

#!/bin/sh

export.UTF-8
REPOS="$1"
REV="$2"
WEB="/home/www"
TIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "Code Deployed By at $TIME,$REPOS,$REV" >> /var/svn/code_deploy.log
svn update $WEB --username huangfei --password hf123456

接着

chmod +x post-commit

到/home/www下checkout项目

svn checkout svn://127.0.0.1/project/

到此步骤接受,在客服端提交代码更新就会自动同步到web目录了。 

最后测试 sudo ./post-commit 
如果出现 类似下面的 就表示成功 
这里写图片描述

附上svn钩子类型 

服务器钩子: 

svn服务端有9种钩子,分别是: 

A.关于锁定的2种 

a1.pre-lock 

对文件进行加锁操作之前执行该脚本 

a2.post-lock 

对文件进行加锁操作之后执行该脚本

B.关于解锁的2种 

b1.pre-unlock 

对文件进行解锁操作之前执行该脚本 

b2.post-unlock 

对文件进行解锁操作之后执行该脚本

C.关于提交的3种

c1.start-commit 

在客户端还没有向服务器提交数据之前,即还没有建立 Subversion transaction(缩写为 txn) 之前,执行执行该脚本 

c2.pre-commit 

在 Subversion transaction 完毕之后,在提交之前,执行该脚本

c3.post-commit 

在提交完成,成功创建版本之后执行该钩子,提交已经完成,不可更改,因此本脚本的返回值被忽略。

D.关于属性的2种

d1.pre-revprop-change 

在修改 revision 属性之前,执行该脚本

d2.post-revprop-change 

在修改 revision 属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此本脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)

客户端钩子: 

tortoise svn客户端有6中钩子,分别是: 

A.关于提交的

a1.start commit hook

a2.pre-commit hook

a3.post-commit hook

B.关于更新的

b1.start update hook

b2.pre-update hook

b3.post-update hook

转载自:https://blog.csdn.net/li956732806/article/details/71158869