Назад | Перейти на главную страницу

Как настроить Gitlab с обработчиком post-receive?

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

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

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

чтобы включить веб-хуки, перейдите на главную страницу вашего проекта и выберите хуки в правом верхнем углу под главным меню. ( 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);
} 

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

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

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