しかも、リポジトリ毎のスクリプト実行設定はもちろん、スクリプト自体も、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",
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)
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",
↓
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)