【问题标题】:Custom post-receive hook with gitlab使用 gitlab 自定义 post-receive 钩子
【发布时间】:2015-06-15 07:36:31
【问题描述】:

我正在尝试使用 gitlab 设置自定义接收后挂钩

我正在关注他们的文档 here

我在 custom_hooks 文件夹中有一个可执行的 post-receive 文件,其中包含以下代码:

 !/bin/bash
 echo "post-receive firing | wall
 git pull

如果我运行这个文件:

 ./post-receive

它工作正常。当推送到 gitlab 存储库时,它似乎根本不会触发。

这是我第一次尝试任何类型的网络挂钩,所以我有点迷茫。

a) 我的远程网络服务器上有上面的脚本,在 .git/custom_hooks 文件夹中,这是正确的吗?

b) 我需要在 repo 中做些什么吗?

c) 在文档中,它指定我应该设置文件的权限,以便它归“git”用户所有。我的网络服务器上没有 git 用户...所有其他与 git 相关的文件都归我的用户或 root 所有。

因此,假设我在这里做的事情完全错误,有人可以让我摆脱痛苦,并建议一种理智的方法,在我从本地机器推送到 gitlab 时自动推送到 Web 服务器。我觉得我花了一些时间寻找一种方法来做到这一点,而解决方案似乎完全是多余的(cronjob 每隔几秒钟运行一次......)或者像上面那样,似乎不起作用。或者至少我似乎无法让它们发挥作用。

这当然是一项简单的任务......

【问题讨论】:

  • 感谢编辑,但这不是我想要的。实际上,我的钩子正在工作。我不知道如何从 git 服务器(gitlab 的仓库)中提取文件并复制到我的 apache www 文件夹。我与在线版本无关,一切都在我的电脑里。

标签: git gitlab webhooks


【解决方案1】:

在文件上,因此它归“git”用户所有。我的网络服务器上没有 git 用户...所有其他与 git 相关的文件都归我的用户或 root 所有。

那是因为 oyur 网络服务器是 GitLab 服务器的客户端。
documentation you reference 用于配置 GitLab 服务器(将接收后挂钩添加到 GitLab 存储库)。 Hence the 'git' user, which is the default one on a GitLab server.

但是如果你推送到 gitlab.com,你不会直接添加一个钩子。

您需要声明一个web hook,然后它会发回您can listen to in order to trigger another action的JSON消息。

如果你是唯一一个推送,you could simply push to multiple repos。那里不涉及任何钩子,客户端或服务器。
但这将是一个仅对您的本地克隆存储库有效的本地设置。

【讨论】:

  • "你需要声明一个网络钩子,然后它会发回你可以收听的 JSON 消息以触发另一个动作。"我确实对此进行了研究,但是我认为我需要编写自己的自定义工具(以任何语言)以坐在某个端口上并处理传入的钩子,这是否正确?当我只想通过 gitlab 存储库自动推送到 Web 服务器时,这似乎有点过头了
  • 是的,一个网络钩子意味着一个监听器。快速修复解决方法仍然是一次推送到 2 个存储库。
【解决方案2】:

请按以下步骤操作

  1. 转到您的 git 服务器
  2. 使用以下命令查找挂钩 find / -xdev 2>/dev/null -name "钩子"
  3. 选择并转到您各自的项目挂钩文件夹。
  4. 在编辑模式下打开接收后文件 (http://www.wikihow.com/Create-and-Edit-Text-File-in-Linux-by-Using-Terminal)
  5. 把你的逻辑放在这里。如果要执行 url 可以按照以下方式进行

需要'net/http' 需要'uri' uri = URI.parse("YOUR_URL") response = Net::HTTP.get_response(uri)

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2014-10-28
    • 1970-01-01
    • 2011-04-15
    • 2012-02-17
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多