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?

Tristan
la source
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);
} 
Gryphius
la source
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
5

Des crochets personnalisés ont récemment été ajoutés (car comme Gryphius l'a dit, les crochets réguliers sont utilisés en interne): https://github.com/gitlabhq/gitlabhq/blob/667c0a909bde1cf71f21d8ec9768e98b1c489030/doc/hooks/custom_hooks.md

Vous venez de créer un custom_hooksrépertoire dans votre dépôt Git nu, et y mettez les crochets, puis GitLab s'assure qu'ils sont exécutés.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
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

Nicolay77
la source
hookdossier existe déjà:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS