ラベル git の投稿を表示しています。 すべての投稿を表示
ラベル git の投稿を表示しています。 すべての投稿を表示

2014年10月5日日曜日

gitolite3 で、hook スクリプトを設定する

git リポジトリで、hook スクリプトを設定したくなったので、調べてみたら、gitolite3 の設定で、同様のことが出来るようだ。
しかも、リポジトリ毎のスクリプト実行設定はもちろん、スクリプト自体も、gitolite 管理用リポジトリ(gitolite-admin)に、ファイルを追加すると、サーバーサイドで実行してくれるようだ。
仕組みは、管理用リポジトリの push を行った時点で、対象リポジトリの hooks に、設定したシェルのリンクを作成するようだ。gitolite 3.5.3.1-2 時点では、同一フック種に複数のシェルを指定することはできない。3.6 以降では、複数のシェルを設定できるようだが、未確認。

前提条件

  • gitolite3 や git は、インストールおよび設定済みとする。
  • gitolite3 の基本的な設定や利用方法は、習得済みとする。
  • gitolite3 ユーザーのホームディレクトリは、/var/lib/gitolite3 とする。
  • gitolite3 のリポジトリは、gitolite3 ユーザーのホームディレクトリに設定してあるものとする。

update フックの設定

1.gitolite3 のサーバー上の設定ファイルを変更する。

sudo vi /var/lib/gitolite3/.gitolite.rc
以下の行を、コメントインする。
# LOCAL_CODE                =>  "$rc{GL_ADMIN_BASE}/local",
LOCAL_CODE                =>  "$rc{GL_ADMIN_BASE}/local",

これで、gitolite 管理用リポジトリに登録した hook スクリプトが、利用可能になる。

2.gitolite 管理用リポジトリ(gitolite-admin)に update フックファイルを登録

以下のファイルを作成。LF 改行にすること。
gitolite-admin/local/VREF/hello

ファイルの内容は、以下のようにする。
#!/bin/bash
echo "Hello update"

hello ファイルを git add する
ファイルのパーミッションを設定する。ここ重要。
git update-index --chmod=+x hello

TortoiseGit の場合は、hello ファイルを右クリック⇒プロパティ
Git タブを選択⇒実行可能(+x) チェックボックスをチェックで、上記のコマンド入力と同等の状態となる。

コミットおよびサーバーへプッシュする。

3.各リポジトリに update フック設定を行う。

以下のファイルを修正し、最後の行を追加する。
gitolite-admin/conf/gitolite.conf

@admin = admin shpad
repo public/program/HelloClosureLibrary
    RW+     =   @admin
    R       =   @all
    -   VREF/hello = @all

コミットおよびサーバーへプッシュする。

4.動作確認

前述の設定を行ったリポジトリに対して、コミットを行ってみる。

git.exe push -v --progress  "origin" master:master

Pushing to ssh://gitolite3@yebisu/public/program/HelloClosureLibrary
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 378 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
remote: Hello update
remote: From /var/lib/gitolite3/repositories/public/program/HelloClosureLibrary
remote:    7a5bd94..2af6ecd  master     -> origin/master
remote: Updating 7a5bd94..2af6ecd
remote: Fast-forward
remote:  js/src/common.js | 4 ++++
remote:  1 file changed, 4 insertions(+)
To ssh://gitolite3@yebisu/public/program/HelloClosureLibrary
7a5bd94..2af6ecd  master -> master
updating local tracking ref 'refs/remotes/origin/master'

成功 (2839 ms @ 2014/10/05 16:20:12)


うまく動いているようだ。
サーバー側のスクリプトの実行結果は、remote: の行に出力されている。
エラー時もここに表示される。便利。

その他フック設定

1.gitolite3 のサーバー上の設定ファイルを変更する。

sudo vi /var/lib/gitolite3/.gitolite.rc
以下の行を、コメントインする。
# LOCAL_CODE                =>  "$rc{GL_ADMIN_BASE}/local",
LOCAL_CODE                =>  "$rc{GL_ADMIN_BASE}/local",

# 'repo-specific-hooks',
'repo-specific-hooks',

2.gitolite 管理用リポジトリ(gitolite-admin)にその他フックファイルを登録

以下のファイルを作成。LF 改行にすること。
gitolite-admin/local/hooks/repo-specific/hello

ファイルの内容は、以下のようにする。
#!/bin/bash
echo "Hello post-receive"

hello ファイルを git add する
ファイルのパーミッションを設定する。ここ重要。
git update-index --chmod=+x hello

TortoiseGit の場合は、hello ファイルを右クリック⇒プロパティ
Git タブを選択⇒実行可能(+x) チェックボックスをチェックで、上記のコマンド入力と同等の状態となる。

コミットおよびサーバーへプッシュする。

3.各リポジトリにその他フック設定を行う。

以下のファイルを修正し、最後の行を追加する。
フックの動作タイミング = 前述のフックスクリプト。
gitolite-admin/conf/gitolite.conf

@admin = admin shpad
repo public/program/HelloClosureLibrary
    RW+     =   @admin
    R       =   @all
    -   VREF/hello = @all
    option hook.post-receive = hello


コミットおよびサーバーへプッシュする。

4.動作確認

前述の設定を行ったリポジトリに対して、コミットを行ってみる。

git.exe push --progress  "origin" master:master

Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 375 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
remote: Hello update
remote: Hello post-receive
To ssh://gitolite3@yebisu/public/program/HelloClosureLibrary
79615f9..a209006  master -> master

成功 (2433 ms @ 2014/10/05 17:13:39)


2014年8月16日土曜日

GitWeb で、リポジトリを参照できるように、設定してみる。

概要

GitWeb を利用して、以下のような条件で、リポジトリを Web で参照できるように、設定してみた。

  • Gitolite3 管理用リポジトリは、公開対象から除外する。
  • Gitolite3 管理用リポジトリで、公開設定が行える。

参考サイト




利用ソフト

  • Apache2 (2.4.7-1ubuntu4.1)
  • git (1:1.9.1-1)
  • Gitolite3 (3.5.3.1-2)
  • GitWeb (1:1.9.1-1)


前提条件

Ubuntu 14.04 上で、設定を行った。
Apache2 および git は、インストール済みとする。

Gitolite

Gitolite3 のインストールおよび設定は、以下のサイトを参考に行った。
Gitolite3 パッケージ名は、gitolite3 と、指定する必要があるので注意。gitolite は、バージョン2.3で古かった。
Gitolite3 ユーザーは、パッケージインストール時、/var/lib/gitolite3 に自動的に作成される。

Git管理の神ツール「Gitolite」なら、ここまでできる! (1/2)


GitWeb

インストール

sudo aptitude install gitweb
sudo a2enmod cgi

Apache2 の設定

まず、Apache の設定で、/etc/apache2/conf.d/gitweb がインストールされているが、場所もファイル名も間違っている。
sites-available に gitweb.conf とリネームして移動して、conf.d ディレクトリを削除する。
gitweb.conf の中身は、変更なし。

GitWeb の設定

次に、/etc/gitweb.conf を修正。
$projectroot には、Gitolite3 のリポジトリを指定。その他は、コメントインするだけ。
sudo vi /etc/gitweb.conf

$projectroot = "/var/lib/gitolite3/repositories";
$git_temp = "/tmp";
$home_text = "indextext.html";
$projects_list = $projectroot;
@stylesheets = ("static/gitweb.css");
$javascript = "static/gitweb.js";
$logo = "static/git-logo.png";
$favicon = "static/git-favicon.png";
@diff_opts = ();

リポジトリパーミッションの設定

このままでは、www-data ユーザで、Gitolite3 のリポジトリにアクセスする権限が無いので、その設定を行う。
sudo gpasswd -a www-data gitolite3
sudo chmod g+rx /var/lib/gitolite3
sudo chmod g+r /var/lib/gitolite3/projects.list
sudo chmod -R g+r /var/lib/gitolite3/repositories
sudo find /var/lib/gitolite3/repositories -type d -exec chmod g+x {} +


新規にリポジトリを追加する場合に、グループ読み取り可になるようパーミッションを設定。
sudo vi /var/lib/gitolite3/.gitolite.rc
    UMASK                           =>  0077,
                                                 ↓ 変更
    UMASK                           =>  0027,


Apache2 をリスタート
sudo apache2ctl restart


以上の設定で、すべてのリポジトリが公開できる。

公開リポジトリ設定

このままでは、管理用リポジトリも一覧に出てしまうので、指定したものだけリストアップされるように設定。

sudo vi /etc/gitweb.conf

$projects_list = $projectroot;
  ↓ 変更
$projects_list = "/var/lib/gitolite3/projects.list";

以下追加。一覧にあるリポジトリ以外は、直接 URL を指定しても表示されなくなる。
$strict_export = "true";


上記で指定した project.list ファイルには、Gitolite3 で @all または、gitweb に参照権限を付与したプロジェクトが、リストアップされる。
Gitolite3 管理リポジトリの gitolite-admin/conf/gitolite.conf ファイルを、以下のように変更して push すると、project.list ファイルに、公開リポジトリが書き込まれる。

repo  foobar
    R    =    gitweb