Jak skonfigurować Gitlab z hakiem po odbiorze?

19

Używam Gitlab na jednym serwerze i chciałbym wypchnąć moje repozytorium git przy zatwierdzaniu gałęzi master na inny serwer WWW. Kiedy więc pcham nową wersję strony, serwer produkcyjny zostaje zaktualizowany. Wiem, że powinno to być możliwe z hakami w gitlabie, ale nie jestem w stanie dokładnie ustalić, jak to dokładnie jest. Wypróbowałem następujący przewodnik http://danielmiessler.com/study/git/#website, ale nie jest napisany do użytku z gitlab, więc brakuje mi części.

Co muszę zrobić na produkcyjnym serwerze internetowym i do czego wtedy ustawić adres URL przechwytującego?

Tristan
źródło
możesz użyć zwykłych haków git, jeśli masz dostęp do roota do serwera git, zobacz hak po zatwierdzeniu tutaj: git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka
Możesz wypróbować niestandardowe haki Git .
monsta

Odpowiedzi:

9

gitlab używa już wewnętrznego haka po odbiorze. możesz również bawić się tym skryptem i wywoływać hak, ale z dokumentów wynika, że ​​„oficjalnym” sposobem byłoby użycie „haków internetowych”, tzn. pozwól gitlab wywoływać twój serwer po otrzymaniu, a następnie twój serwer ściąga repozytorium. Sam tego nie próbowałem, ale ponieważ nikt do tej pory nie odpowiedział, pomyślałem, że skieruję cię w tym kierunku:

aby włączyć haki internetowe, przejdź na stronę główną projektu i wybierz haki z prawego górnego rogu, poniżej menu głównego. ( http://yourgitlab.example.net/yourproject/hooks ). istnieje przykład i dokumenty połączone z tej strony ( http://yourgitlab.example.net/help/web_hooks ).

edytować://

Próbowałem tego dziś rano. Oto przykład skryptu php. Zakłada się, że już sklonowałeś repozytorium, a serwer WWW ma skonfigurowane wszystkie niezbędne uprawnienia / klucze 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);
} 
Gryf
źródło
tak, wiem gdzie znaleźć stronę haczyków. Po prostu nie wiem, jak plik powinien wyglądać, jak gitlab powinien publikować na.
Tristan
1
patrz zredagowana odpowiedź, dodałem przykładowy skrypt. może nie jest idealny, ale przynajmniej szybki test wydaje się działać
Gryphius
4

Gitlab nie ma haka po otrzymaniu, ponieważ twórcy zastąpili gitolite powłoką gitlab .

Dlatego możesz:

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

Upewnij się, że użytkownik git ma wszystkie uprawnienia potrzebne do uruchamiania poleceń w tym pliku

Nicolay77
źródło
hookfolder już istnieje:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS