Come configurare Gitlab con hook post-ricezione?


19

Sto usando Gitlab su un server e vorrei spingere il mio repository git su commit del ramo master su un altro server web. Quindi, quando invio una nuova versione del sito Web, il server di produzione viene aggiornato. So che questo dovrebbe essere possibile con gli hook all'interno di gitlab ma non riesco a trovare esattamente come. Ho provato la seguente guida http://danielmiessler.com/study/git/#website ma non è stata scritta per l'uso con gitlab, quindi non ho parti mancanti.

Cosa devo fare sul server web di produzione e su cosa devo impostare l'URL di hook?


puoi usare i normali hook git, se hai accesso root al server git, vedi hook post-commit qui: git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka

Puoi provare gli hook Git personalizzati .
Monsta,

Risposte:


9

gitlab utilizza già l'hook post-ricezione internamente. potresti armeggiare con quello script e chiamare anche il tuo hook, ma dai documenti sembra che il modo "ufficiale" sarebbe usare "web-hook", ovvero lasciare che gitlab chiami il tuo server web su post-ricezione e il tuo server web quindi estrae il repository. Non ho provato questo da solo, ma dato che nessuno ha risposto finora ho pensato di indirizzarti in quella direzione:

per abilitare gli hook web vai nella pagina principale del tuo progetto e seleziona hook in alto a destra, sotto il menu principale. ( http://yourgitlab.example.net/yourproject/hooks ). c'è un esempio e documenti collegati da quella pagina ( http://yourgitlab.example.net/help/web_hooks ).

modificare://

L'ho provato stamattina. Ecco un esempio di script php. Presuppone che tu abbia già clonato il repository e che il server web abbia tutte le autorizzazioni necessarie / chiavi ssh impostate.

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

sì, so dove trovare la pagina degli hook. Semplicemente non so come dovrebbe apparire il file come gitlab.
Tristan,

1
vedi risposta modificata, ho aggiunto uno script di esempio. potrebbe non essere perfetto, ma almeno un test rapido sembra funzionare
Gryphius


4

Gitlab non ha un hook post-ricezione poiché gli sviluppatori hanno sostituito gitolite con gitlab-shell .

Pertanto è possibile:

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

Assicurarsi che l'utente git disponga di tutte le autorizzazioni necessarie per eseguire i comandi in questo file


hookla cartella esiste già:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.