gitLab 全局hooks和custom_hooks,以及怎样实现自动pull

Posted 众生皆苦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitLab 全局hooks和custom_hooks,以及怎样实现自动pull相关的知识,希望对你有一定的参考价值。

写代码的时候,git push到远程代码库后,往往还要连到服务器上pull代码才能进行测试。代码push后自动更新测试服务器的代码也算是一种刚需了。

gitLab的钩子分为两大类:1.web hooks

            2.custom hooks,这是调用git原生钩子,这里的钩子也有两种类型:(1)全局钩子 (2)每个项目对应的钩子。

这几天踩了很多坑,才用一种迂回的方法解决了问题。介绍一下GitLab和ubuntu的版本:

(1)Ubuntu 16.04.1 LTS + GitLab Community Edition 9.4.4

(2)Ubuntu 16.04.1 LTS + GitLab Community Edition 8.15.4

两个版本的gitlab配置起来是几乎是一样的。

1.web hooks

参考:https://docs.gitlab.com/ee/user/project/integrations/webhooks.html

这里就不重点介绍了,主要介绍让我踩了很多坑的custom hooks

2. custom hooks

参考:https://docs.gitlab.com/ee/administration/custom_hooks.html#custom-git-hooks

这里的官网文档有句:Normally, Git hooks are placed in the repository or project‘s hooks directory. GitLab creates a symlink from each project‘s hooks directory to the gitlab-shell hooks directory for ease of maintenance between gitlab-shell upgrades.

这里的symlink是软链接,类似windows的快捷方式,但是还是有区别:以gitlab中的hooks目录为例:

在dir1/hooks/A,在dir2/hooks/A,这里两个hooks是软链接的关系,其实是同一个。路径dir1和dir2不同,但是对这两个目录下的hooks目录的文件修改,添加,删除,都同时起作用,因为这个目录本来就是一个。好了,我们看gitlab中是怎样做的:

 

git本身具备hook机制,可以接收代码前或者更新代码后调用自定义的脚本。这个脚本在{{代码仓库}}/.git/hooks目录下。如下图:/home/htdocs/lost为git代码仓库,lost下面.git/hooks目录为git的回调脚本。常用的有pre-commit改脚本在提交前执行,可以做一些提交的验证工作。还有一个post-receive,该脚本在代码提交后执行,自动更新远程服务器的代码就用到这个脚本。

以上是关于gitLab 全局hooks和custom_hooks,以及怎样实现自动pull的主要内容,如果未能解决你的问题,请参考以下文章

在Gitlab中防止单个repo的链式git钩子

gitlab 使用原始的hooks同步到某一个目录

gitlab根据hook钩子自动化部署

自动化发布-GitLab WEB Hooks 配置

jenkins 设置 gitlab web hooks

Jenkins配置接收Gitlab Hook