如何使用接收后挂钩设置Gitlab?


19

我在一台服务器上使用Gitlab,并希望将master分支提交时的git存储库推送到另一台Web服务器。因此,当我推送网站的新版本时,生产服务器将得到更新。我知道这可以在gitlab中使用钩子实现,但是我无法找到确切的位置。尝试了以下指南http://danielmiessler.com/study/git/#website,但由于它不是为与gitlab一起使用而编写的,因此Im缺少部分。

我需要在生产Web服务器上执行什么操作,然后将挂钩URL设置为什么?


您可以使用常规的git钩子,如果您对git服务器具有root访问权限,请在此处查看提交后的钩子:git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka

您可以尝试使用Custom Git钩子
monsta 2014年

Answers:


9

gitlab已经在内部使用了post-receive钩子。您可以随意修改该脚本并调用您的钩子,但是从文档中看来,“官方”方式将是使用“ web-hooks”,即让gitlab在接收后调用您的Web服务器,然后让您的Web服务器拉存储库。我自己还没有尝试过,但是由于到目前为止还没有人回答,所以我认为我会朝着这个方向指出:

要启用Web挂钩,请进入项目的主页,然后从主菜单下方的右上角选择挂钩。(http://yourgitlab.example.net/yourproject/hooks)。该页面上有一个example&docs链接(http://yourgitlab.example.net/help/web_hooks)。

编辑://

我今天早上试过了。这是一个php脚本示例。假设您已经克隆了仓库,并且Web服务器已经设置了所有必需的权限/ ssh密钥。

<?php
$mirrordir='/srv/http/gitlabhooktest/gitmirror';
$gitdir=$mirrordir."/.git";

$json= file_get_contents('php://input');
#error_log($json);
$jsarr=json_decode($json,true);
#error_log(print_r($jsarr,true));
$branch=$jsarr["ref"];
if($branch=='refs/heads/master'){
 $cmd="git --work-tree=$mirrordir --git-dir=$gitdir pull";
 #error_log($cmd);
 exec($cmd);
} 

是的,我知道在哪里可以找到钩子页面。我只是不知道该文件应该看起来像gitlab应该发布到。
特里斯坦,

1
看到编辑后的答案,我添加了一个示例脚本。可能并不完美,但至少可以进行一次快速测试
Gryphius


4

Gitlab没有接收后钩子,因为开发人员用gitlab-shell代替了gitolite

因此,您可以:

sudo -u git bash
touch /home/git/repositories/<repository name>.git/hooks/post-receive
vim /home/git/repositories/<repository name>.git/hooks/post-receive

确保git用户具有运行此文件中的命令所需的所有权限


hook文件夹已经存在:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.