gerritはDebian 8のApache2上で動かします。
debian-8というホスト名を使用しています。
ウェブインターフェースのユーザビリティに難ありです(設定ミスを挽回しづらい)。
複雑なことはさせないほうが良いかもです。
git-reviewの使い方はこちらを参照してください。
JenkinsのGerrit Tirigger Pluginの使い方はこちらを参照してください。
gerritのhooksスクリプトの使い方はこちらを参照してください。
Table of Contents
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にアクセスし、ダイジェスト認証のパスワードを入力すると以下の画面が得られました。
右上の"Become"のリンクをクリックし、ユーザ登録画面に移動します。自分とjenkinsをユーザに追加します。
ユーザの詳細な設定画面が表示されます。詳細な設定は後ほど変更することもできます。
右上のSwitch Accountでユーザの切り替えを、Settingでフルネーム、SSH公開鍵ができます。
フルネームを登録します。
SSHの公開鍵を登録します。
上記の画像はjenkinsのみでしたが、自分のアカウントも追加しております。
自分とjenkinsをAdministratorsグループに参加させる為、右上のSwitch Account経由で一度Administratorに変更します。
Administratorになったら、PeopleタブのList Groups画面を開きます。
ここでAdministratorsグループを選択します。
自分とjenkinsの所属グループをAdministratorsグループに追加します。
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オプションを使いますが、こちらは後から削除可能です。
All-Projectsを選択し、Edit configボタンを押します。
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
Saveした後にColseするとAll-Projects設定の差分画面に移行します。
以下のボタンを押していくことで、設定が反映されます。
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を継承してプロジェクトを作成します。
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