使用svn hooks 脚本post-commit时遇到的故障

由于网站上线,需要把新添加功能上传到测试环境进行测试,但由于程序员每天有大量的修改,如果总是登陆服务器手动更新svn工作副本(测试环境)太耗时耗精力,进而增加svn进行commit时,测试环境即时更新的功能。

post-commit脚本:

#!/bin/sh
REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
/usr/bin/svn update /data0/htdocs/xxx.xxx.xx.xxx --username user --password xxxxxx 2>>/tmp/svn_hook_log.txt
echo `whoami`,$REPOS,$REV >> /tmp/svn_hook_var.txt

问题1:

注意字符集问题,本机

LANG=en_US.UTF-8

则脚本中必须加入

export LANG = en_US.UTF-8

否则提交时被报错

问题2:

更新后报错,脚本执行失败

查看svn_hook_log.txt,内容是svn提示要缓冲明文密码到硬盘,需要输入yes或者no确认,因为得不到脚本回应,所以报错退出。

解决办法:需要在svn服务器配置文件中把store-plaintext-passwords 项前#号去掉并把值改为no

因为需要使用apache身份执行脚本,所以执行

cp -r /root/.subversion/ /var/www/   #apache用户家目录

再修改

vim /var/www/.subversion/servers

store-plaintext-passwords = no

问题3:

在工作副本中手动执行了一次svn update后,就发现hooks脚本执行失败,并报错

svn: Can‘t open file ‘/data0/htdocs/xxx.xxx.xx.xx/styles/.svn/tmp/entries‘: Permission denied

一番排查、google后,得出结论,应该是以root身份执行svn update后,.svn文件夹下部分文件夹属主变为root,所以apache身份运行脚本时就没有权限写入了。

解决办法:到报错信息下的.svn路径中,执行chown apache:apache -R *

可能还有别的路径下.svn路径中有问题,在工作副本根下执行 chown apache:apache -R *

时间: 2024-11-08 23:34:14

使用svn hooks 脚本post-commit时遇到的故障的相关文章

利用SVN HOOKS脚本同步服务器

内部测试服务器同时兼做SVN服务器,所以配置了SVN HOOKS的post-commit脚本,在团队成员成功提交了文件后,自动完成测试服务器的更新.步骤如下:1. cd /svnroot/hooks2. cp post-commit.tmpl post-commit3. 将post-commit的内容修改为:#!/bin/shSVN=/usr/bin/svnWEB=/var/web/$SVN up --username server --password 123456 $WEB其中,/var/w

svn hooks的使用demo

svn提供了Hooks Script.所谓钩子实际上市一种时间触发机制,是指当系统执行到某个特殊的事件时,触发我们预定义的动作,可以让我们在某些特定状态发生的时候做我们想做的事. 进入一个生成的SubVersion的代码仓库,在目录下面有一个Hooks的目录,进入该目录,正常情况下,你应该看到的是下图: .tmpl都是每个hooks的模板文件,其实都是文本文件,使用vi打开后,可以看到里面的注释和详细的说明,这些是我们可以使用的第一手的帮助文件. 如上图svn服务端有9种钩子,分别是: A.关于

svn hooks 同步设置

昨天配置了一下午svn  hooks 本了很简单的一件事情,却因为 一个https弄的异常难搞. 在hooks的目录下,编辑 post_commit之后,始终无法updae,原因是,需要ssl验证主机. 在网上查看了下,用了svn ls  https://****之后,弹出需要确认,输入p,输入密码之后还是不行. 于是,我怀疑是用户的是.svn+apache  做的https协议.应该是用apache用户跑的吧. 可是apache用户我设置的是没有登陆权限的.怎么办? 只好usermod  修改

svn hooks使用

最近要将某个目录做samba共享出去,而想通过svn同步文档到svn,然后通过svn hooks 同步到共享目录,实现自动化 现在svn服务器和samba server再同一台机器上: 在svn路径下找到hooks目录,下面有很多脚本如下: post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmplpost-lock.tmpl pre-commit.tmpl pre-unlock.tmplpost-revprop-change.tmpl p

svn提交错误:Commit failed (details follow): Can't create directory

重装系统后,启动svn,挂载原来的repository目录,访问正常,但提交时老发生以下错误: Commit failed (details follow): Can't create directory ***.txn: No such file or directory google一把,看到碰到这样问题的倒也不少,解决办法不多.下面这篇文章里得到个提醒:svn的repository目录转移到新机器时不要直接使用,要用svnadmin dump/load来拷贝使用.于是dump & load

svn 钩子脚本

#vim post-commit #!/bin/bash REPOS="$1"  REV="$2"  SVNLOOK="/usr/bin/svnlook" echo "`date +%F`" >> /tmp/post.log echo "REPOS=$1 REV=$2" >> /tmp/post.log echo -e "\[email protected][email p

Python SVN 更新 脚本

#configs PROJECTS = { "away3d":"svn://svnurl/away3d", "Away3DUCtrl":"svn://svnurl/Away3DUCtrl", "Editor":"svn://svnurl/Editor", "EditorUI":"svn://svnurl/EditorUI", "Skill

设置SVN hooks实现自动发布

# CentOS下安装SVN yum -y install subversion svnserve --version cd /home/ mkdir svn cd svn/ /usr/bin/svnserve -d -r /home/svn/ # 启动SVN服务 svnadmin create /home/svn/test/ # 创建版本仓库 vi /etc/rc.local # 新增以下内容 /usr/bin/svnserve -d -r /home/svn/ # 先设置 passwd ,并

对于shell脚本参数获取时的一点小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的 当时纠结了好久,最后上百度提问,两位高手给出了答案: 1) #!/bin/sh NUMBER=$# echo $NUMBER i=1 while [ $i -le $NUMBER ] do a[$i]=$1 #将数组a[i]赋值为$1,即取得