今天在家没事部署了一个自己的业余项目,代码托管目前用的是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
稍等一会不出意外的话就可以正常同步到服务器端了。