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