web-dev-qa-db-ja.com

post-receiveフックでGitlabをセットアップする方法は?

あるサーバーでGitlabを使用していて、masterブランチを別のウェブサーバーにコミットするときにgitリポジトリをプッシュしたいと考えています。そのため、新しいバージョンのWebサイトをプッシュすると、プロダクションサーバーが更新されます。私はこれがgitlab内のフックで可能であることを知っていますが、正確に見つけることができません。次のガイドを試してみました http://danielmiessler.com/study/git/#website ですが、gitlabで使用するために作成されていないため、Imが不足しています。

本番ウェブサーバーで何をする必要がありますか。また、フックURLを何に設定しますか?

19
Tristan

gitlabは既に内部でpost-receiveフックを使用しています。あなたはそのスクリプトをいじってフックを呼び出すこともできますが、ドキュメントからは「公式」の方法は「web-hooks」を使用するように見えます。つまり、gitlabにpost-receiveとwebserverリポジトリをプルします。私はこれを自分で試したことはありませんが、今のところ誰も答えていないので、その方向にあなたを向けると思いました。

webフックを有効にするには、プロジェクトのメインページに移動し、右上のメインメニューの下からフックを選択します。 ( http://yourgitlab.example.net/yourproject/hooks )。そのページからリンクされたexample&docsがあります( http://yourgitlab.example.net/help/web_hooks )。

edit://

今朝食べてみました。これがphpスクリプトの例です。リポジトリのクローンがすでに作成されており、ウェブサーバーに必要なすべての権限/ SSHキーが設定されていることを前提としています。

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

カスタムフックが最近追加されました(Gryphiusによると、通常のフックは内部で使用されるため): https://github.com/gitlabhq/ gitlabhq/blob/667c0a909bde1cf71f21d8ec9768e98b1c489030/doc/hooks/custom_hooks.md

あなただけのcustom_hooksディレクトリをそのままGitリポジトリに配置し、フックをそこに配置すると、GitLabによって確実に実行されます。

開発者 gititoliteをgitlab-Shellに置き換えた なので、Gitlabにはポスト受信フックがありません。

したがって、次のことができます。

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

Gitユーザーがこのファイルのコマンドを実行するために必要なすべての権限を持っていることを確認してください

4
Nicolay77