[实例]使用PHP建立SVN的远程钩子,使用exec命令自动更新SVN的代码

本操作需要使用到php执行sudo命令的权限,相关设置可以参考:
apache/Nginx下的PHP/Ruby执行sudo权限的系统命令

通过Svn的钩子功能,可以在我们执行SVN操作时,同时自动执行一些操作,比较常见的操作有:
1,本地更新并提交代码时,在测试环境或者线上环境同时将代码更新到最新版
2,在更新Svn时,如果有数据库相关的操作,可以同时将SQL发给远程钩子程序执行相关的SQL

这个实例是我们项目组用到的一个片段,实现在本地开发代码测试通过以后,往线上提交SVN时,自动将代码更新到线上,或者执行导出打包的工作

[php]
<?php
//先切换到程序部署的目录
$path = dirname(__FILE__);
exec("cd {$path}");

exec("sudo /usr/bin/svn up", $output);
print_r($output);
[/php]

这里需要将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”

发表评论