写代码的时候,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,该脚本在代码提交后执行,自动更新远程服务器的代码就用到这个脚本。