本操做须要使用到php执行sudo命令的权限,相关设置能够参考:
apache/Nginx下的PHP/Ruby执行sudo权限的系统命令php
经过Svn的钩子功能,能够在咱们执行SVN操做时,同时自动执行一些操做,比较常见的操做有:
1,本地更新并提交代码时,在测试环境或者线上环境同时将代码更新到最新版
2,在更新Svn时,若是有数据库相关的操做,能够同时将SQL发给远程钩子程序执行相关的SQL数据库
这个实例是咱们项目组用到的一个片断,实如今本地开发代码测试经过之后,往线上提交SVN时,自动将代码更新到线上,或者执行导出打包的工做apache
<?php //先切换到程序部署的目录 $path = dirname(__FILE__); exec("cd {$path}"); exec("sudo /usr/bin/svn up", $output); print_r($output);
这里须要将apache加入sudoer组svn
为此,修改sudo配置文件,直接键如visudo命令编辑配置文件:测试
1. 注释Defaults requiretty
Defaults requiretty修改成 #Defaults requiretty, 表示不须要控制终端。
不然会出现sudo: sorry, you must have a tty to run sudoui
2. 增长行 Defaults visiblepw
不然会出现 sudo: no tty present and no askpass program specifiedspa
3. 赋予apache用户执行svn权限
如,增长行:apache ALL=(ALL) NOPASSWD: /usr/bin/svn
注:NOPASSWD能够使在命令执行时不须要交互输入apache用户的密码code
最后一步,即在SVN钩子中添加提交SVN时,自动访问远程连接“http://www.4wei.cn/yoursvnfile.php”orm