Php 如何设置Gitlab Web钩子到部署

Php 如何设置Gitlab Web钩子到部署,php,git,github,gitlab,webhooks,Php,Git,Github,Gitlab,Webhooks,我已经创建了一个新项目,并在该项目中创建了分支。我需要为我的开发服务器配置一个特定的分支。无论何时推送到该分支,它都应该自动部署到服务器 我已经在Gitlab中尝试使用Web钩子。但它没有起作用。请提供一个参考。一步一步的链接。我需要在本地计算机和服务器系统中执行哪些配置。我发现我们需要在服务器上设置一些“PostReceiveWebhook”,请有人给个主意 “在这里,我将解释我手中的内容。服务器已经在没有git的情况下安装。我在一个分支“开发”中有一个项目。我已经在本地克隆并推送到分支。它工

我已经创建了一个新项目,并在该项目中创建了分支。我需要为我的开发服务器配置一个特定的分支。无论何时推送到该分支,它都应该自动部署到服务器

我已经在Gitlab中尝试使用Web钩子。但它没有起作用。请提供一个参考。一步一步的链接。我需要在本地计算机和服务器系统中执行哪些配置。我发现我们需要在服务器上设置一些“PostReceiveWebhook”,请有人给个主意


“在这里,我将解释我手中的内容。服务器已经在没有git的情况下安装。我在一个分支“开发”中有一个项目。我已经在本地克隆并推送到分支。它工作正常。(我使用的是window machine git bash)。但在这里,当我推送一些更新时,我需要推送到服务器。因此,我尝试使用Web钩子。但它不起作用。“

有一个允许此操作的配置选项(默认情况下关闭)。 推送时,它将直接同步服务器

如果git服务器与http服务器不在同一台机器上,则可以使用:

我也遇到了这个问题,几乎没有适合初学者的文档

以下是我使用gitlab实现此功能所采取的步骤:

确保在要自动部署的服务器上有一个SSH密钥,对我来说,这是一个Ubuntu服务器。我必须为www数据生成一个SSH密钥,以便用户可以连接到gitlab服务器

我必须运行此命令为www数据用户生成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数据组添加到该文件夹中

之后,我必须编写一个脚本,在调用钩子时运行我想要的命令

这是我正在使用的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数据的执行权限

完成所有这些之后,您需要在项目中创建webhook(项目->设置->webhook)

将url添加到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放在服务器的一个子域中,这样我就可以用它来推送具有相同文件的不同站点

我还添加了used,以便确保发送到服务器的数据


我不确定我是否忘记了什么,但我认为这就是我所做的一切

cronjob是什么?这里可能有重复之处我将解释我手中的东西。服务器已在没有git的情况下安装。我有一个项目内的一个分支“发展”。我已经在我的本地克隆并正在推到分支。它工作得很好。(我使用的是windows机器gitbash)。但在这里,当我推送一些更新时,我需要推送到服务器。所以,我尝试了Web钩子。但是它不起作用。我们在我工作的地方做的是有一个basic.sh脚本,它可以执行
git-pull-origin-master&&cp-Rf//http/server/path
你可以将它放在一个30秒的CRON中,就可以了。这不是您想要的,但操作简单且效率高。
git clone URL。
git init
之后的
将失败,因为目录不是空的。由于尚未克隆存储库,您要克隆到的目录应该是空的。但是
git init
将文件添加到目录中,使其非空<代码>git克隆URL。
一个人就足够了。@emilebergron:你说得对!我编辑了答案以删除
git init