我在一台服务器上使用Gitlab,并希望将master分支提交时的git存储库推送到另一台Web服务器。因此,当我推送网站的新版本时,生产服务器将得到更新。我知道这可以在gitlab中使用钩子实现,但是我无法找到确切的位置。尝试了以下指南http://danielmiessler.com/study/git/#website,但由于它不是为与gitlab一起使用而编写的,因此Im缺少部分。
我需要在生产Web服务器上执行什么操作,然后将挂钩URL设置为什么?
我在一台服务器上使用Gitlab,并希望将master分支提交时的git存储库推送到另一台Web服务器。因此,当我推送网站的新版本时,生产服务器将得到更新。我知道这可以在gitlab中使用钩子实现,但是我无法找到确切的位置。尝试了以下指南http://danielmiessler.com/study/git/#website,但由于它不是为与gitlab一起使用而编写的,因此Im缺少部分。
我需要在生产Web服务器上执行什么操作,然后将挂钩URL设置为什么?
Answers:
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);
}
最近添加了自定义钩子(因为Gryphius表示内部使用了常规钩子):https : //github.com/gitlabhq/gitlabhq/blob/667c0a909bde1cf71f21d8ec9768e98b1c489030/doc/hooks/custom_hooks.md
您只需custom_hooks
在裸露的Git存储库中创建一个目录,并在其中放置钩子,然后GitLab确保它们可以运行。
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/