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

我的代码托管在开源中国得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...
阿神
阿神

闭关修行中......

membalas semua(3)
漂亮男人

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

Mungkin ini masalah kebenaran

漂亮男人

Saya biasanya tidak menggunakan cangkuk. Saya menyusahkan untuk menyelenggara skrip ini di mana sahaja ia perlu digunakan

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

Sudah tentu, jika program anda juga perlu melakukan beberapa operasi lain untuk kemas kini kod, ini tidak akan berguna.

左手右手慢动作

Siarkan skrip kecil mudah yang saya tulis Mengkonfigurasi beberapa maklumat bukan sahaja dapat merealisasikan fungsi subjek, tetapi juga merekodkan maklumat ke log dengan mudah.

<?php
/**
 * Class Main
 * @url https://git.oschina.net/edvard_hua2/PHP-WebHook-Script.git
 * @author Edward
 * @time 2015.08.23 08:13
 */

/**
 * format var_dump
 * @param void $varVal 
 * @param str $varName 
 * @param bool $isExit 
 */
function dump($varVal, $isExit = FALSE){
    ob_start();
    var_dump($varVal);
    $varVal = ob_get_clean();
    $varVal = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $varVal);
    echo '<pre>'.$varVal.'</pre>';
    $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.');

?>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan