本操作需要使用到php执行sudo命令的权限,相关设置可以参考:
apache/Nginx下的PHP/Ruby执行sudo权限的系统命令
通过Svn的钩子功能,可以在我们执行SVN操作时,同时自动执行一些操作,比较常见的操作有:
1,本地更新并提交代码时,在测试环境或者线上环境同时将代码更新到最新版
2,在更新Svn时,如果有数据库相关的操作,可以同时将SQL发给远程钩子程序执行相关的SQL
这个实例是我们项目组用到的一个片段,实现在本地开发代码测试通过以后,往线上提交SVN时,自动将代码更新到线上,或者执行导出打包的工作
<?php
//先切换到程序部署的目录
$path = dirname(__FILE__);
exec("cd {$path}");
exec("sudo /usr/bin/svn up", $output);
print_r($output);
这里需要将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”