我也遇到过这个问题,对于初学者来说几乎没有任何文档。
以下是我为使用 gitlab 所采取的步骤:
确保在要自动部署的服务器上有一个 SSH 密钥,对我来说这是一个 Ubuntu 服务器。我必须为 www-data 生成一个 SSH 密钥,以便用户可以连接到 gitlab 服务器。
我必须运行这个命令来为 www-data 用户生成一个 ssh 密钥:
sudo -u www-data ssh-keygen -t rsa
生成 ssh 密钥后,您必须将其添加到 gitlab 到您的项目部署密钥中。 (项目->设置->部署密钥)。
现在转到您希望项目推送到的文件夹(对我来说是 /var/www/website/)并执行以下操作:
git clone origin-url .
最后的点使它只提取文件,不包括你的项目在 gitlab 上的文件夹。
那么……
chgrp -R www-data .git
chmod -R g+rwxs .git
这将授予 git 文件夹执行 php 命令的权限并将 www-data 组添加到该文件夹。
之后,我必须编写一个脚本,以便在调用钩子时运行我想要的命令。
这是我正在使用的 php,我将文件命名为 webhook.php
<?php
if($payload = file_get_contents('php://input')) {
try {
$payload = json_decode($payload);
} catch(Exception $ex) {
echo $ex;
exit(0);
}
// put the branch you want here
if($payload->ref != "refs/heads/master") {
echo "wrong head";
exit(0);
}
//put the branch you want here, as well as the directory your site is in
$result = `cd /var/www/website && git fetch origin && git merge origin/master`;
echo $result;
} else {
echo "failed request";
}
?>
webhook.php 也需要来自 www-data 的执行权限。
所有这些都完成后,您需要在项目中创建 webhook (project->settings->webhooks)
将 url 添加到 webhook.php 中
我将 webhook.php 放在服务器上的一个子域中,这样我就可以使用它来推送具有相同文件的不同站点。
http://deploy.website.com/webhook.php
我还添加了 used http://requestb.in,以便我可以确保发送到服务器的数据。
不确定我是否忘记了什么,但我认为这就是我所做的一切