Comment configurer Gitlab avec un crochet post-réception?


19

J'utilise Gitlab sur un serveur et je voudrais pousser mon référentiel git lors de la validation de la branche principale vers un autre serveur Web. Ainsi, lorsque je lance une nouvelle version du site Web, le serveur de production est mis à jour. Je sais que cela devrait être possible avec des crochets à l'intérieur de gitlab mais je ne peux pas trouver exactement comment. J'ai essayé le guide suivant http://danielmiessler.com/study/git/#website mais il n'est pas écrit pour être utilisé avec gitlab donc je manque des pièces.

Que dois-je faire sur le serveur Web de production et à quoi puis-je définir l'URL du hook?


vous pouvez utiliser les hooks git standard, si vous avez un accès root au serveur git, voir le hook post-commit ici: git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka

Vous pouvez essayer des crochets Git personnalisés .
monsta

Réponses:


9

gitlab utilise déjà le hook de post-réception en interne. vous pouvez jouer avec ce script et appeler votre hook aussi, mais d'après les documents, il semble que la manière "officielle" serait d'utiliser des "web-hooks", c'est-à-dire que gitlab appelle votre serveur web après réception et votre serveur web ensuite tire le référentiel. Je n'ai pas essayé cela moi-même, mais comme personne n'a répondu jusqu'à présent, j'ai pensé que je vous dirigerais dans cette direction:

pour activer les web-hooks, allez dans la page principale de votre projet et sélectionnez les hooks en haut à droite, en dessous du menu principal. ( http://yourgitlab.example.net/yourproject/hooks ). il y a un exemple et des documents liés à partir de cette page ( http://yourgitlab.example.net/help/web_hooks ).

Éditer://

Je l'ai essayé ce matin. Voici un exemple de script php. Il suppose que vous avez déjà cloné le référentiel et que le serveur Web dispose de toutes les autorisations / clés ssh nécessaires.

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

oui je sais où trouver la page des crochets. Je ne sais simplement pas à quoi le fichier devrait ressembler.
Tristan

1
voir la réponse éditée, j'ai ajouté un exemple de script. peut ne pas être parfait mais au moins un test rapide semble fonctionner
Gryphius


4

Gitlab n'a pas de hook post-réception puisque les développeurs ont remplacé gitolite par gitlab-shell .

Vous pouvez donc:

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

Assurez-vous que l'utilisateur git dispose de toutes les autorisations nécessaires pour exécuter les commandes de ce fichier


hookdossier existe déjà:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.