gerritのインストール方法

gerritはDebian 8のApache2上で動かします。

debian-8というホスト名を使用しています。

ウェブインターフェースのユーザビリティに難ありです(設定ミスを挽回しづらい)。

複雑なことはさせないほうが良いかもです。

 

git-reviewの使い方はこちらを参照してください。

JenkinsのGerrit Tirigger Pluginの使い方はこちらを参照してください。

gerritのhooksスクリプトの使い方はこちらを参照してください。

 

1 gerritパッケージのインストール

こちらを参考にgerritパッケージをDebian 8にインストールします。

$ sudo su -c 'echo "deb mirror://mirrorlist.gerritforge.com/deb gerrit contrib" > /etc/apt/sources.list.d/gerritforge.list'
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1871F775
$ sudo apt-get update -y
$ sudo apt-get install -y gerrit

2 gerrit.conf:ポート変更とApache2対応

TCPポートを8080から8081へ、http://[ホスト名]/gerritでアクセスするようにします。

diff -uprN /var/gerrit/etc/gerrit.config{.org,}
--- /var/gerrit/etc/gerrit.config.org   2015-08-21 21:55:28.184000000 +0900
+++ /var/gerrit/etc/gerrit.config       2015-08-21 20:31:58.212000000 +0900
@@ -1,6 +1,6 @@
 [gerrit]
        basePath = git
-       canonicalWebUrl = http://debian-8:8080/
+       canonicalWebUrl = http://debian-8/gerrit
 [database]
        type = h2
        database = db/ReviewDB
@@ -13,7 +13,7 @@
 [sshd]
        listenAddress = *:29418
 [httpd]
-       listenUrl = http://*:8080/
+       listenUrl = proxy-http://127.0.0.1:8081/gerrit
 [cache]
        directory = cache
 [container]

gerritを再起動します。

$ sudo /etc/init.d/gerrit restart

3 Apache2の設定

TCPポート8081のサービスをhttp://[ホスト名]/gerritでアクセスできるようにします。

URLのアクセスにダイジェスト認証を使います。

nocanonを付けないとpath/to/src.cのようにスラッシュを持つソースコードにアクセスできません。

$ sudo su -c 'cat << EOF > /etc/apache2/mods-enabled/gerrit.conf
ProxyPass           /gerrit  http://localhost:8081/gerrit nocanon
ProxyPassReverse    /gerrit  http://localhost:8081/gerrit nocanon
ProxyRequests       Off

<Proxy http://localhost:8081/gerrit>
  Order deny,allow
  Allow from all
</Proxy>

<Location /login>
  AuthType Digest
  AuthName "gerrit"
  AuthUserFile /etc/apache2/.htdigest
  Require valid-user
</Location>
EOF
'

VirtualHostディレクティブ内部でAllowEncodedSlashesをOnにします。gerritはスラッシュの代わりに%2Fを使うページがあります。

$ diff -uprN /etc/apache2/sites-available/000-default.conf{.org,}
--- /etc/apache2/sites-available/000-default.conf.org   2015-08-21 21:33:02.964000000 +0900
+++ /etc/apache2/sites-available/000-default.conf       2015-08-21 20:36:18.876000000 +0900
@@ -26,6 +26,8 @@
        # following line enables the CGI configuration for this host
        # only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
+
+       AllowEncodedSlashes On
 </VirtualHost>
 
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noe

ダイジェスト認証のファイルを作成します。jenkinsからはssh経由でgerritにアクセスするので、ダイジェスト認証のファイルに追加する必要はありません。

$ sudo htdigest -c /etc/apache2/.htdigest "gerrit" hiroom2
Adding password for hiroom2 in realm gerrit.
New password: 
Re-type new password:

Apache2を再起動します。

$ sudo /etc/init.d/apache2 restart

4 ユーザ作成

http://[ホスト名]/gerritにアクセスし、ダイジェスト認証のパスワードを入力すると以下の画面が得られました。

https://dl-web.dropbox.com/s/st5f96nzz99epps/0001_Access-Page.png

右上の"Become"のリンクをクリックし、ユーザ登録画面に移動します。自分とjenkinsをユーザに追加します。

https://dl-web.dropbox.com/s/m5gm86frv1g7waf/0002_Register-User.png

ユーザの詳細な設定画面が表示されます。詳細な設定は後ほど変更することもできます。

https://dl-web.dropbox.com/s/dqbnruertuonm3c/0003_User-Detail.png

右上のSwitch Accountでユーザの切り替えを、Settingでフルネーム、SSH公開鍵ができます。

https://dl-web.dropbox.com/s/3wee5yggh4vsi8v/0004_User-Setting.png

フルネームを登録します。

https://dl-web.dropbox.com/s/ozi69gx79cueivh/0005_FullName.png

SSHの公開鍵を登録します。

https://dl-web.dropbox.com/s/uwfgfhlpm7cgmcd/0006_SSH-PublicKey.png

上記の画像はjenkinsのみでしたが、自分のアカウントも追加しております。

自分とjenkinsをAdministratorsグループに参加させる為、右上のSwitch Account経由で一度Administratorに変更します。

 

Administratorになったら、PeopleタブのList Groups画面を開きます。

ここでAdministratorsグループを選択します。

https://dl-web.dropbox.com/s/5sx8nwmpj82h8d7/0007_Administrators.png

自分とjenkinsの所属グループをAdministratorsグループに追加します。

https://dl-web.dropbox.com/s/yrwjex1fgsint86/0008_Addministrators-Add.png

5 ALl-Projectsにlabel "Verified"を追加

gerritではプロジェクトの雛形を用意しておき、新規にプロジェクトを作成する際に、雛形を継承することができます。

デフォルトとしてAll ProjectsとAll-Usersがあります。

今回はAll Projectsを利用します。

 

All Projectsからはlabel "Verified"が削除されており、CLI用のgerritコマンドの–verifiedオプションが使えません。

そこでlabel "Verified"を追加します。

ただし、副作用があり、Code Review +2ボタンが表示されなくなります。

 

Code-Reviewのスコアだけで運用する場合は追加不要です。

Jenkins Triggerプラグインは初期設定で–verifiedオプションを使いますが、こちらは後から削除可能です。

https://dl-web.dropbox.com/s/ejqmdqkrwzh2shk/0009_Projects-List.png

All-Projectsを選択し、Edit configボタンを押します。

https://dl-web.dropbox.com/s/6zd1aodj0fwhxoq/0010_Edit-Config.png

label "Verified"の設定を追加します。

$ cat 2be719d8.diff 
From 2be719d8ece0e0d7f1540ac6b52004fa0564221a Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: Sun, 23 Aug 2015 09:42:52 +0900
Subject: [PATCH] Edit Project Config

Change-Id: I2bc9c3bbf61c4ac22ec98293b822d4a89775ab8d
---

diff --git a/project.config b/project.config
index b636357..67cace7 100644
--- a/project.config
+++ b/project.config
@@ -27,6 +27,9 @@
        label-Code-Review = -2..+2 group Administrators
        label-Code-Review = -2..+2 group Project Owners
        label-Code-Review = -1..+1 group Registered Users
+       label-Verified = -1..+1 group Administrators
+       label-Verified = -1..+1 group Project Owners
+       label-Verified = -1..+1 group Registered Users
        submit = group Administrators
        submit = group Project Owners
        editTopicName = +force group Administrators
@@ -39,6 +42,8 @@
        push = group Project Owners
        label-Code-Review = -2..+2 group Administrators
        label-Code-Review = -2..+2 group Project Owners
+       label-Verified = -1..+1 group Administrators
+       label-Verified = -1..+1 group Project Owners
        submit = group Administrators
        submit = group Project Owners
 [access "refs/tags/*"]
@@ -55,3 +60,8 @@
        value =  0 No score
        value = +1 Looks good to me, but someone else must approve
        value = +2 Looks good to me, approved
+[label "Verified"]
+       function = MaxWithBlock
+       value = -1 Fails
+       value =  0 No score
+       value = +1 Verified

https://dl-web.dropbox.com/s/1ban7yqzph1egrq/0011_label-Verified.png

Saveした後にColseするとAll-Projects設定の差分画面に移行します。

https://dl-web.dropbox.com/s/aqxd8ogieli95m2/0012_Submit.png

以下のボタンを押していくことで、設定が反映されます。

Publish Edit -> Publish -> Code Review +2 -> Submit

これ以降はCode-ReviewスコアとVerifiedスコアをつけないと変更が反映されないことになります。

5.1 Code-ReviewスコアとVerifiedスコア

Code-Reviewスコアはレビュー用のスコア、Verifiedスコアはテスト検証用のスコアです。VerifiedはJenkinsのGerrit Triger Pluginを用いてスコア値を反映させると良いでしょう。

6 プロジェクトの作成

ユーザを自分に変更します(プロジェクトのOwnerを自分にする為)。ProjectsタブのCreate New Project画面を開きます。All-Projecsを継承してプロジェクトを作成します。

https://dl-web.dropbox.com/s/hu6tf0niar959am/0013_Create-New-Project.png

7 既存のリポジトリをアップロード

SSH公開鍵で登録したユーザで既存のリポジトリをgerritにアップロードします。コミットのハッシュ値も一緒になります(Redmineで助かります)。

$ git clone --bare <path-to-orig-repo>
$ cd <path-to-orig-repo>
$ git push ssh://debian-8:29418/test.git *:*
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 525 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 6 (delta 0)
remote: Processing changes: refs: 1, done    
To ssh://debian-8:29418/test.git
 * [new branch]      master -> master

8 gerrit.conf:認証をHTTPに変更(任意)

認証方法にDEVELOPMENT_BECOME_ANY_ACCOUNTは使うなとドキュメントに記載されているので、認証方法をHTTPに変更します。

OSSの場合はOpenID、LAN内の開発チームならばLDAPが良いと思いますが、今回はHTTPにしております。

HTTPの場合、ユーザの切り替えがダイジェスト認証任せになるので、ブラウザにパスワードを覚えさせるとユーザが固定されることになります。

diff -uprN /var/gerrit/etc/gerrit.config{.org,}
--- /var/gerrit/etc/gerrit.config.org   2015-08-21 23:28:53.576000000 +0900
+++ /var/gerrit/etc/gerrit.config       2015-08-21 23:29:00.096000000 +0900
@@ -7,7 +7,7 @@
 [index]
        type = LUCENE
 [auth]
-       type = DEVELOPMENT_BECOME_ANY_ACCOUNT
+       type = HTTP
 [sendemail]
        smtpServer = localhost
 [sshd]

gerritを再起動します。

$ sudo /etc/init.d/gerrit restart