开源中国Git PUSH钩子部署PHP程序
阿神
阿神 2017-05-02 09:19:58
0
3
727

我的代码托管在开源中国得Git库里,想使用Git钩子来实现程序的部署,写了一个程序接受钩子的post的数据,但是不能实现程序的部署。。代码如下:

public function index(){ $logger = new KLogger(LOG_PATH.'KLogger'); $web_root_dir = APP_PATH; // /var/www/site if(IS_POST){ $payload = $_POST; $payload = json_decode($payload['hook']); $logger->info('data from git post...', $payload); // if (!empty($payload['password'])){ $command = "cd {$web_root_dir} && git pull"; $logger->info('enter if .....'); $result = exec($command); $logger->info('command execute result...'.$result); // } } }

在程序里记录了日志,能接收到post数据,但是命令执行不成功,下面是log的内容:

[2015-05-05 2:07:34.114928] [INFO] data from git post... password: '123456' push_data: stdClass::__set_state(array( 'before' => '7a563d4498371a8572a88ff22fb726ac7f8dd467', 'after' => 'f24b208ddb520b1349fca6a5a0295db516b3982b', 'ref' => 'refs/heads/master', 'user_id' => 120469, 'user_name' => '', 'repository' => stdClass::__set_state(array( 'name' => '', 'url' => '', 'description' => '', 'homepage' => '', )), 'commits' => array( 0 => stdClass::__set_state(array( 'id' => 'f24b208ddb520b1349fca6a5a0295db516b3982b', 'message' => 'a', 'timestamp' => '2015-05-05T02:07:35+08:00', 'url' => 'http://git.oschina.net/commit/f24b208ddb520b1349fca6a5a0295db516b3982b', 'author' => stdClass::__set_state(array( 'name' => '', 'email' => '', )), )), ), 'total_commits_count' => 1, )) [2015-05-05 2:07:34.115142] [INFO] enter if ..... [2015-05-05 2:07:35.482580] [INFO] command execute result...
阿神
阿神

闭关修行中......

répondre à tous (3)
漂亮男人

http://blog.skyx.in/archives/158/

可能是权限问题

    漂亮男人

    我一般不用钩子,麻烦还维护,需要部署的地方执行这个脚本

    #! /bin/bash while true do git pull sleep 5 done

    当然,如果你的程序还需要针对代码更新做一些其他操作,这个就不好用了.

      左手右手慢动作

      贴自己写的一个简单的小脚本,配置一些信息既可以实现题主功能,能够简单的记录信息到log。

      \n(\s+)/m", "] => ", $varVal); echo '
      '.$varVal.'
      '; $isExit && exit(); } /** * @param str $msg */ function writeLog($msg){ date_default_timezone_set("Asia/Shanghai"); file_put_contents('log.txt',"\r\n".date("h:i:sa").': '.$msg,FILE_APPEND|LOCK_EX); } /** * @see http://php.net/manual/en/function.proc-open.php */ $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to ); $postData = json_decode($_POST['hook'],true); if($postData['password'] !== '##You Password##'){ writeLog('un-authorization request:'.$_SERVER['HTTP_HOST']); die; } $username = '##You Username##'; $password = '##You Password##'; $cwd = '####'; //The initial working dir for the command. This must be an absolute directory path $projectSuffix = '##owner##/##project_name##.git'; $branch = '##Branch Name##'; $updateUrl = 'https://'.$username.':'.$password.'@git.oschina.net/'.$projectSuffix; $process = proc_open('git pull '.$updateUrl.' '.$branch,$descriptorspec,$pipes,$cwd,NULL); if(is_resource($process)){ $output = stream_get_contents($pipes[1]); fclose($pipes[1]); } $return_value = proc_close($process); if($return_value == 0){ writeLog('Command success: '.$postData['push_data']['after'].'\r\n'.$output); }else writeLog('Command faild.'); ?>
        Derniers téléchargements
        Plus>
        effets Web
        Code source du site Web
        Matériel du site Web
        Modèle frontal
        À propos de nous Clause de non-responsabilité Sitemap
        Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!