【问题标题】:How to setup Gitlab Web Hook to deployment如何将 Gitlab Web Hook 设置为部署
【发布时间】:2014-04-05 19:50:55
【问题描述】:

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

我在 Gitlab 中尝试过使用 Web Hook。但它没有用。请给一个参考。一步一步的链接。我需要在本地机器以及服务器系统中进行哪些配置。我发现我们需要设置一些“在服务器中发布接收 WebHook”,有人可以给出一个想法。

“在这里我将解释我手中的东西。服务器已经设置没有 git。我在一个分支“开发”中有一个项目。我已经在本地克隆并推送到分支。它工作正常。(我正在使用窗口机器 git bash)。但是当我推送一些更新后,我需要推送到服务器。所以,我尝试了 Web Hook。但它不起作用。“

【问题讨论】:

标签: php git github gitlab webhooks


【解决方案1】:

我也遇到过这个问题,对于初学者来说几乎没有任何文档。

以下是我为使用 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,以便我可以确保发送到服务器的数据。

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

【讨论】:

  • git clone URL . after git init 将失败,因为目录不为空。
  • 因为你还没有克隆你的仓库,所以你要克隆的目录应该是空的。
  • 但是git init 将文件添加到目录中,使其非空。 git clone URL . 一个人就够了。
  • @EmileBergeron:你是对的!我编辑了答案以删除git init
【解决方案2】:

有一个配置选项允许这样做(默认关闭)。 在推送时,它将直接与服务器同步。

如果你的 git 服务器和你的 http 服务器不在同一台机器上,你可以使用它: http://ryanflorence.com/deploying-websites-with-a-tiny-git-hook/

【讨论】:

  • 这里我将解释我手中的东西。服务器已经在没有 git 的情况下设置。我在一个分支“开发”中有一个项目。我在本地克隆并推送到分支。它工作正常。 (我正在使用窗口机器 git bash)。但是在这里,当我推送一些更新后,我需要推送到服务器。所以,我尝试过使用 Web Hook。但它不起作用。
  • 我们在我工作的地方所做的是有一个基本的 .sh 脚本,它可以执行 git pull origin master &amp;&amp; cp -Rf ./ /http/server/path 您可以将它放入一个 30 秒时间的 CRON 中并且没问题。不是您真正想要的,但操作简单且足够高效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 2022-12-13
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多