Como configurar o Gitlab com o gancho pós-recebimento?

19

Estou usando o Gitlab em um servidor e gostaria de enviar meu repositório git ao confirmar o branch master para outro servidor da web. Então, quando eu envio uma nova versão do site, o servidor de produção é atualizado. Eu sei que isso deve ser possível com ganchos dentro do gitlab, mas não consigo descobrir exatamente como. Tentei o seguinte guia http://danielmiessler.com/study/git/#website, mas não foi escrito para ser usado com o gitlab, por isso estou perdendo peças.

O que preciso fazer no servidor da produção e para o que defino o URL do gancho?

Tristan
fonte
você pode usar os ganchos regulares do git, se tiver acesso root ao servidor git, consulte o post-commit aqui: git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka
Você pode experimentar os ganchos personalizados do Git .
monsta

Respostas:

9

O gitlab já usa o gancho pós-recebimento internamente. você pode mexer com esse script e chamar seu gancho também, mas a partir dos documentos, parece que a maneira "oficial" seria usar "ganchos da web", ou seja, deixe o gitlab ligar para seu servidor da web em pós-recebimento e, em seguida, para o seu servidor da web puxa o repositório. Eu mesmo não tentei, mas como ninguém respondeu até agora, pensei em indicá-lo nessa direção:

para ativar os ganchos da web, entre na página principal do seu projeto e selecione ganchos no canto superior direito, abaixo do menu principal. ( http://yourgitlab.example.net/yourproject/hooks ). há um exemplo e documentos vinculados nessa página ( http://yourgitlab.example.net/help/web_hooks ).

editar://

Eu tentei esta manhã. Aqui está um exemplo de script php. Ele pressupõe que você já clonou o repositório e o servidor da web possui todas as permissões / chaves ssh necessárias.

<?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
fonte
sim, eu sei onde encontrar a página de ganchos. Só não sei como o arquivo deve parecer com o gitlab.
Tristan
1
veja a resposta editada, adicionei um script de exemplo. pode não ser perfeito, mas pelo menos um teste rápido parece funcionar
Gryphius
4

O Gitlab não possui um gancho pós-recebimento, já que os desenvolvedores substituíram o gitolite pelo gitlab-shell .

Portanto, você pode:

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

Verifique se o usuário git tem todas as permissões necessárias para executar os comandos neste arquivo

Nicolay77
fonte
hookpasta já existe:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS 5/14/14