Frage Wie installiere ich Gitlab mit Post-Receive-Hook?


Ich benutze Gitlab auf einem Server und möchte mein Git-Repository beim Commit des Master-Zweigs auf einen anderen Webserver schieben. Wenn ich also eine neue Version der Website pushe, wird der Produktionsserver aktualisiert. Ich weiß, das sollte mit hooks innerhalb von gitlab möglich sein, aber ich kann nicht genau herausfinden, wie genau. Versuchte den folgenden Leitfaden http://danielmiessler.com/study/git/#website aber es ist nicht für die Verwendung mit gitlab so Im fehlenden Teile geschrieben.

Was muss ich auf dem Produktions-Webserver tun und worauf setze ich dann die Hook-URL?


19
2018-01-06 14:52


Ursprung


Sie können die regulären Git-Hooks verwenden, wenn Sie Root-Zugriff auf den Git-Server haben, siehe Post-Commit-Hook hier: git-scm.com/book/de/v2/Customizing-Git-Git-Hooks - Doka
Du kannst es versuchen Benutzerdefinierte Git-Haken. - monsta


Antworten:


gitlab verwendet intern bereits den Post-Receive-Hook. Sie könnten mit diesem Skript herumhantieren und auch Ihren Hook aufrufen, aber aus den Dokumenten sieht es so aus, als wäre der "offizielle" Weg, "Web-Hooks" zu verwenden, dh gitlab ruft Ihren Webserver auf Post-Receive und Ihren Webserver an zieht das Repository. Ich habe das selbst nicht versucht, aber da niemand so weit geantwortet hat, dachte ich, ich würde dich in diese Richtung weisen:

Um Web-Hooks zu aktivieren, gehen Sie auf die Hauptseite Ihres Projekts und wählen Sie Hooks oben rechts unter dem Hauptmenü aus. ( http://yourgitlab.example.net/yourproject/hooks ). Es gibt ein Beispiel & Dokumente, die von dieser Seite verlinkt sind ( http://yourgitlab.example.net/help/web_hooks ).

bearbeiten://

Ich habe es heute Morgen versucht. Hier ist ein Beispiel für ein PHP-Skript. Es geht davon aus, dass Sie das Repo bereits geklont haben und der Webserver alle notwendigen Berechtigungen / SSH-Schlüssel eingerichtet hat.

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

9
2018-01-06 21:47



Ja, ich weiß wo ich die Hooks finde. Ich weiß einfach nicht, wie die Datei aussehen soll, wie gitlab es veröffentlichen soll. - Tristan
Siehe bearbeitete Antwort, ich habe ein Beispielskript hinzugefügt. ist vielleicht nicht perfekt, aber zumindest scheint ein schneller Test zu funktionieren - Gryphius


Benutzerdefinierte Haken wurden kürzlich hinzugefügt (da Gryphius sagte, dass die regulären Hooks intern verwendet werden): https://github.com/gitlabhq/gitlabhq/blob/667c0a909bde1cf71f21d8ec9768e98b1c489030/doc/hooks/custom_hooks.md

Sie erstellen einfach ein custom_hooks Verzeichnis in Ihrem Git Repo, und legen Sie die Haken, und dann GitLab stellt sicher, dass sie ausgeführt werden.


5
2017-12-17 07:54





Gitlab hat keinen Post-Empfangshaken seit den Entwicklern ersetzt Gitolit mit Gitlab-Shell.

Daher können Sie:

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

Stellen Sie sicher, dass der Benutzer git über alle Berechtigungen verfügt, die zum Ausführen der Befehle in dieser Datei erforderlich sind


4
2018-04-22 01:04



hook Ordner existiert bereits: hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/ - MariuszS