【问题标题】:How can I add hooks to gitlab?如何向 gitlab 添加钩子?
【发布时间】:2014-08-01 00:09:26
【问题描述】:

我在/opt/gitlab-6.9.2-0/apps/gitlab/ 上的 CentOs 上设置了一个新的 Gitlab,并在持续交付组下创建了一个新的存储库。完整路径是/opt/gitlab-6.9.2-0/apps/gitlab/gitlab-satellites/continuous-delivery/cd-test 。此路径下只有一个文件,即 README.txt。

我试图实现的是当有人将更改推送到服务器时创建一个新文件。以下是我在服务器上所做的:

  1. 在.git/hooks/' each file creates a new file usingecho "text" >> file_name`下创建post-update和update文件
  2. chmod 为 775。

当我将更改从本地推送到服务器时,没有创建文件。所以,我想知道我必须做些什么来解决这个问题。

更新 1

我将post-receive 和post-update 添加到repositories 路径为VonC suggested

[root@git-cd hooks]# pwd
/opt/gitlab-6.9.2-0/apps/gitlab/repositories/continuous-delivery/cd-test.git/hooks
[root@git-cd hooks]# ll
total 48
-rwxrwxr-x. 1 git git  452 Jun 10 06:01 applypatch-msg.sample
-rwxrwxr-x. 1 git git  896 Jun 10 06:01 commit-msg.sample
-rwxrwxr-x. 1 git git   44 Jun 11 00:37 post-receive
-rwxrwxr-x. 1 git git   41 Jun 11 00:38 post-update
-rwxrwxr-x. 1 git git  189 Jun 10 06:01 post-update.sample
-rwxrwxr-x. 1 git git  398 Jun 10 06:01 pre-applypatch.sample
-rwxrwxr-x. 1 git git 1642 Jun 10 06:01 pre-commit.sample
-rwxrwxr-x. 1 git git 1281 Jun 10 06:01 prepare-commit-msg.sample
-rwxrwxr-x. 1 git git 1352 Jun 10 06:01 pre-push.sample
-rwxrwxr-x. 1 git git 4972 Jun 10 06:01 pre-rebase.sample
lrwxrwxrwx. 1 git git   57 Jun 10 06:01 update -> /opt/gitlab-6.9.2-0/apps/gitlab/gitlab-shell/hooks/update
-rwxrwxr-x. 1 git git 3611 Jun 10 06:01 update.sample

这两个文件都包含一个向现有文件"post-receive-2" >> /var/log/hooks_test.log 添加新行的脚本。然后将更改从我的本地计算机推送到服务器。但它仍然没有附加文本。

更新 2

post-receive 中的脚本错误,它没有回显。添加回声后(echo "post-receive-2" >> /var/log/hooks_test.log 然后它按预期工作!

【问题讨论】:

标签: git continuous-integration gitlab


【解决方案1】:

那是因为这些卫星存储库不是您要推送到的那个,所以当您想到时(即,不是当有人推送到 GitLab 服务器时),它们的钩子不会触发。

PR 6185介绍架构概述文档

/home/git/gitlab-satellites - 从 Web UI 检出合并请求和文件编辑的存储库。这可以被视为一个临时文件目录。

网络界面使用卫星存储库来编辑存储库,而 wiki 也是一个 git 存储库。

你应该将你的钩子添加到裸仓库~git/repositories。

或者(2014 年第四季度更新,来自 GitLab 7.5+ Nov 2014),您可以使用 custom hooks(而不是 webhooks),作为 mentioned below by @987654326 @。

必须在 GitLab 服务器的文件系统上配置自定义 git 挂钩。
只有 GitLab 服务器管理员才能完成这些任务。如果您没有文件系统访问权限,请探索 webhook 作为一个选项。

  • 在 GitLab 服务器上,导航到项目的存储库目录。
    对于手动安装,路径通常是 /home/git/repositories/<group>/<project>.git。
    对于 Omnibus 安装,路径通常是 /var/opt/gitlab/git-data/repositories/<group>/<project>.git。
  • 在此位置创建一个名为 custom_hooks 的新目录。
  • 在新的custom_hooks 目录中,创建一个名称与挂钩类型匹配的文件。
    对于pre-receive 挂钩,文件名应为pre-receive,不带扩展名。
  • 使挂钩文件可执行并确保它归git所有。

【讨论】:

  • 我刚刚尝试将文件添加到裸存储库,但它仍然无法正常工作。我添加了有关该问题的更多信息。
  • @Anonymous 您不会将文件添加到裸仓库:它是一个 bare 仓库(仅限 .git,根本没有文件)。见stackoverflow.com/a/24115534/6309。您的挂钩应在单独的路径中创建文件。但是该钩子必须在裸仓库中声明才能被推送触发。
  • 糟糕,我发现了问题。我在 post-receive 上写的命令是错误的。
【解决方案2】:

从 gitlab-shell 版本 2.2.0(需要 GitLab 7.5+)开始,GitLab 管理员可以将自定义 git 挂钩添加到任何 GitLab 项目。所以你必须升级,并按照这里的说明进行操作:https://docs.gitlab.com/ce/administration/custom_hooks.html

【讨论】:

  • 有趣。我忘记了之前可以从该新功能中受益的答案。我已相应地对其进行了编辑以提高知名度。 +1
【解决方案3】:

官方方法见Custom Git Hooks - GitLab Documentation。

总结:从 gitlab-shell 版本 2.2.0(需要 GitLab 7.5+)开始,GitLab 管理员可以向任何 GitLab 项目添加自定义 git 挂钩。

  1. 选择一个需要自定义 git 挂钩的项目。
  2. 在 GitLab 服务器上,导航到项目的存储库目录。对于从源安装,路径通常是 /home/git/repositories/<group>/<project>.git 对于 Omnibus 安装,路径通常是 /var/opt/gitlab/git-data/repositories/<group>/<project>.git
  3. 在此位置创建一个名为 custom_hooks 的新目录。
  4. 在新的custom_hooks 目录中,创建一个名称与挂钩类型匹配的文件。对于预接收挂钩,文件名应为 pre-receive,不带扩展名。
  5. 使挂钩文件可执行并确保它归 git 所有。
  6. 编写代码以使 git 挂钩按预期运行。 Hooks 可以是任何语言。确保顶部的“shebang”正确反映语言类型。例如,如果脚本使用 Ruby,则 shebang 可能是 #!/usr/bin/env ruby。

但请参阅上面的官方文档链接。以上是今天的快照……

【讨论】:

  • 对不起@Doka,我没有看到你的答案。我们找到了相同的信息。我会留下我重复的答案,因为它有更多信息......
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多