本操作需要使用到php执行sudo命令的权限,相关设置可以参考:
apache/nginx下的php/ruby执行sudo权限的系统命令
通过svn的钩子功能,可以在我们执行svn操作时,同时自动执行一些操作,比较常见的操作有:
1,本地更新并提交代码时,在测试环境或者线上环境同时将代码更新到最新版
2,在更新svn时,如果有数据库相关的操作,可以同时将sql发给远程钩子程序执行相关的sql
这个实例是我们项目组用到的一个片段,实现在本地开发代码测试通过以后,往线上提交svn时,自动将代码更新到线上,或者执行导出打包的工作
这里需要将apache加入sudoer组
为此,修改sudo配置文件,直接键如visudo命令编辑配置文件:
1. 注释defaults requiretty
defaults requiretty修改为 #defaults requiretty, 表示不需要控制终端。
否则会出现sudo: sorry, you must have a tty to run sudo
2. 增加行 defaults visiblepw
否则会出现 sudo: no tty present and no askpass program specified
3. 赋予apache用户执行svn权限
如,增加行:apache all=(all) nopasswd: /usr/bin/svn
注:nopasswd可以使在命令执行时不需要交互输入apache用户的密码
最后一步,即在svn钩子中添加提交svn时,自动访问远程链接“http://www.4wei.cn/yoursvnfile.php”