见世界

SVN自动部署——post-commit权限问题

之前提到过svn钩子脚本的简单应用 (svn的一些细节),当网站与svn在同一台服务器时,简单配置即可实现“svn提交代码,自动更新网站根目录”。

工作中碰到 “网站与svn在不同服务器” 的情况,存在两个障碍:
1、ssh远程命令无密码参数;
2、post-commit脚本执行账户为www,此账号无法通过写入公钥自动登陆。

我的解决方案是使用expect,代码如下

#!/usr/bin/expect -f  
 set ip 10.10.1.105
 set password mypasswd
 set timeout 30
 spawn ssh svnagency@$ip
 expect {
 "*yes/no" { send "yes\r"; exp_continue}
 "*password:" { send "$password\r" }
 }
 expect "$*"
 send "svn up /var/www/pub/docs\r"
 send  "exit\r"
 expect eof