Wie richte ich Gitlab mit Post-Receive-Hook ein?

19

Ich verwende Gitlab auf einem Server und möchte mein Git-Repository beim Festschreiben des Master-Zweigs auf einen anderen Webserver übertragen. Wenn ich also eine neue Version der Website pushe, wird der Produktionsserver aktualisiert. Ich weiß, dass dies mit Hooks in Gitlab möglich sein sollte, aber ich kann nicht genau herausfinden, wie. Versuchte die folgende Anleitung http://danielmiessler.com/study/git/#website, aber es ist nicht für die Verwendung mit Gitlab geschrieben, so dass ich Teile vermisse.

Was muss ich auf dem Produktions-Webserver tun und auf was stelle ich dann die Hook-URL ein?

Tristan
quelle
Sie können die regulären Git-Hooks verwenden. Wenn Sie Root-Zugriff auf den Git-Server haben, lesen
Doka
Sie können Custom Git Hooks ausprobieren .
Montag,

Antworten:

9

gitlab verwendet den Post-Receive-Hook bereits intern. Sie könnten mit diesem Skript herumspielen und Ihren Hook auch aufrufen, aber in den Dokumenten sieht es so aus, als ob der "offizielle" Weg darin bestünde, "Web-Hooks" zu verwenden, dh gitlab ruft Ihren Webserver nach dem Empfang auf und Ihren Webserver dann zieht das Repository. Ich habe das selbst nicht ausprobiert, aber da bisher noch niemand geantwortet hat, dachte ich, ich würde Sie in diese Richtung weisen:

Um Web-Hooks zu aktivieren, rufen Sie die Hauptseite Ihres Projekts auf und wählen Sie oben rechts unter dem Hauptmenü Hooks aus. ( http://yourgitlab.example.net/yourproject/hooks ). Auf dieser Seite befindet sich ein Beispiel und Dokumente ( http://yourgitlab.example.net/help/web_hooks ).

bearbeiten://

Ich habe es heute Morgen versucht. Hier ist ein PHP-Skript-Beispiel. Es wird davon ausgegangen, dass Sie das Repo bereits geklont haben und der Webserver alle erforderlichen 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);
} 
Gryphius
quelle
ja ich weiß wo die hooks seite zu finden ist. Ich weiß nur nicht, wie die Datei aussehen soll, auf die gitlab posten soll.
Tristan
1
Siehe bearbeitete Antwort, ich habe ein Beispielskript hinzugefügt. Vielleicht nicht perfekt, aber zumindest scheint ein schneller Test zu funktionieren
Gryphius
4

Gitlab hat keinen Post-Receive-Hook, da die Entwickler Gitolite durch Gitlab-Shell ersetzt haben .

Deshalb 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

Nicolay77
quelle
hookOrdner bereits vorhanden:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS