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);
}