MENU

在Coding上部署WebHook

September 10, 2017 • 默认分类

今天在家没事部署了一个自己的业余项目,代码托管目前用的是Coding。想着试一下WebHook吧。以为挺简单的东西,没想到配置的过程中遇到了一些坑。

第一步

需要生成一个服务器的部署公钥,然后在在Coding网站填写生成的公钥。

sudo -Hu www ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这样就会在/home/www下的.ssh生成一对公私钥。然后叫公钥(id_rsa.pub)复制到Coding的后台。

部署公钥

第二步

克隆项目到WEB目录下,我服务器上的web目录为/srv/code,所以执行下面的命令

cd /srv/code
sudo -u www git clone git@git.coding.net/yourAccount/yourRepoName

上面的第二条命令很关键,我就掉了这个坑。-u参数指定了使用Web服务器的执行用户,不然当Coding发送push请求的时候会因为没有权限而导致pull不下来。我之前是直接root用户登录上去的,然后直接用root克隆下来的仓库。但是网上也有解决办法,但是使用-u参数来克隆仓库是最简单的。

第三步

最后一步就是准备钩子文件了。首先在web目录下生成一个webhook.php文件。然后具体代码如下

<?php

error_reporting(1);

$target = '/srv/code/MongoDB'; // 生产环境web目录
$token = 'xxx';
//$wwwUser = 'www';
//$wwwGroup = 'www';

$json = json_decode(file_get_contents('php://input'), true);
if (empty($json['token']) || $json['token'] !== $token) {
    exit('error request');
}
//$repo = $json['repository']['name'];
//$dir = __DIR__ . '/repos/' . $repo;

$cmds = array(
    "cd $target && git pull",
    /*
    "cd $dir && git pull",
    "rm -rf $target/* && cp -r $dir/* $target/",
    "chown -R {$wwwUser}:{$wwwGroup} $target/",
    */
);

foreach ($cmds as $cmd) {
    shell_exec($cmd);
}

这个文件参考了安正超博客但是去掉了一些多余的部分。就是因为上面我使用了-u参数,所有我不需要在使用chown来重新更新所属用户和所属组了。

最后的最后就是在本地git add . && git commit && git push稍等一会不出意外的话就可以正常同步到服务器端了。