Как настроить Gitlab с подключением после получения?

19

Я использую Gitlab на одном сервере и хотел бы перенести мой git-репозиторий при фиксации главной ветки на другой веб-сервер. Поэтому, когда я запускаю новую версию сайта, рабочий сервер обновляется. Я знаю, что это возможно с помощью крючков внутри gitlab, но я не могу найти, как именно. Пробовал следующее руководство http://danielmiessler.com/study/git/#website, но оно не написано для использования с gitlab, поэтому я пропускаю детали.

Что мне нужно сделать на рабочем веб-сервере и для чего мне установить URL-адрес перехвата?

Тристан
источник
вы можете использовать обычные хиты git, если у вас есть root-доступ к git-серверу, смотрите пост-фиксацию здесь: git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka
Вы можете попробовать Custom Git hooks .
Монста

Ответы:

9

gitlab уже использует хук post-receive для внутреннего использования. вы можете поиграть с этим сценарием и также вызвать свой хук, но из документов похоже, что «официальным» способом будет использование «веб-хуков», т.е. пусть gitlab вызывает ваш веб-сервер на post-receive и ваш веб-сервер затем тянет хранилище. Я не пробовал это сам, но так как до сих пор никто не ответил, я думал, что укажу вам в этом направлении:

чтобы включить веб-хуки, зайдите на главную страницу вашего проекта и выберите хуки в правом верхнем углу, под главным меню. ( http://yourgitlab.example.net/yourproject/hooks ). есть примеры и документы, связанные с этой страницей ( http://yourgitlab.example.net/help/web_hooks ).

редактировать://

Я попробовал это сегодня утром. Вот пример сценария php. Предполагается, что вы уже клонировали репозиторий, и на веб-сервере установлены все необходимые разрешения / 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
5

Недавно были добавлены пользовательские хуки (поскольку, как сказал Грифиус, обычные хуки используются внутри): https://github.com/gitlabhq/gitlabhq/blob/667c0a909bde1cf71f21d8ec9768e98b1c489030/doc/hooks/custom_hooks.md

Вы просто создаете custom_hooksкаталог в вашем Git-репозитории и вставляете в него хуки, а затем GitLab обеспечивает их запуск.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
4

Gitlab не имеет хука post-receive, так как разработчики заменили gitolite на gitlab-shell .

Поэтому вы можете:

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 есть все разрешения, необходимые для запуска команд в этом файле.

Nicolay77
источник
hookпапка уже существует:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS