使用PHP创建SVN的远程钩子,使用exec命令自动更新SVN的代码

本操做须要使用到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

相关文章
相关标签/搜索