如何在gitlab中添加钩子?

时间:2014-06-11 03:55:55

标签: git continuous-integration gitlab

我在/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. post-update echo“text”>>下创建update.git/hooks/' each file creates a new file using个文件file_name`
  2. chmod to 775。
  3. 当我将更改从本地推送到服务器时,没有创建文件。所以,我想知道如何解决这个问题。

    更新1

    我将post-receivepost-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

    收到后的脚本错了,它没有回音。在我添加echo(echo "post-receive-2" >> /var/log/hooks_test.log之后,它按预期工作!

3 个答案:

答案 0 :(得分:11)

那是因为那些卫星回购不是你要推送的那个,所以当你想到时(即不是有人推送到GitLab服务器时)他们的钩子不会触发。

PR 6185介绍了archicture概述文档

  

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

     

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

你应该在裸露的回购~git/repositories中添加你的钩子。

或(更新2014年第4季度,来自GitLab 7.5+ Nov 2014),您可以使用 custom hooks (而不是 webhooks ), mentioned below Doka。{/ p>

  

必须在GitLab服务器的文件系统上配置自定义git挂钩   只有GitLab服务器管理员才能完成这些任务。如果您没有文件系统访问权限,请浏览webhooks。

     
      
  • 在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所有。
  •   

答案 1 :(得分:2)

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

答案 2 :(得分:1)

请参阅Custom Git Hooks - GitLab Documentation了解正式方法。

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

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