スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[評] gerrit

ソースコードレビューに使うgerritをclosedな環境でも
使いたくて、まず標準的な入れ方を調べてみた。

これを元に後でインターネットに接続できないところで
使う場合のやり方になおすのだが、そもそもつながる状態
での手順をよく知らなかったので書き残しておく。


■準備
・環境
 windows7上のvagrant 1.6.3にて、ubuntu 14.04のVMを作って
 その中にgerrit 2.9.3をインストールする。
 gerritからgitのリポジトリにコードをmergeできるようにする。

・作業用のVMとそのホストは、インターネット接続できること。
 ホストから有線でブロードバンドルータから外にいけるような
 人が多いかもしれないが、私の場合、たまたま無線LANルータ
 (docomo L-03E)で外とつないでいた。

 なので、VMと外をつなぐ際、windows7 コンパネの
 「ネットワークと共有センター」>「アダプターの設定の変更」にて
 VMで使おうとしているセグメントの「VirtualBox Host-Only Network」と、
 「ワイヤレスネットワーク接続」を、ネットワークブリッジ(MAC Bridge Miniport)
 にて接続して通信できるようにした。

・参考資料
 https://gerrit-documentation.storage.googleapis.com/Documentation/2.9.3/index.html
 https://gerrit-documentation.storage.googleapis.com/Documentation/2.9.3/install.html


■gerritインストール
0.インストール先VMの準備。
vagrantで仮想マシンを作成。

適当なディレクトリでvagrant initによりVagrantfileを準備して以下のように
ubuntu 14.04(trusty), Memory 2GB, host-only NWのVMとなるようにする。
vagrant upにて起動し、vagrant sshで接続。


# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "ubuntu/trusty64"
# config.vm.boot_timeout = 60

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
# Don't boot with headless mode
vb.gui = true

# Use VBoxManage to customize the VM. For example to change memory:
vb.customize ["modifyvm", :id, "--cpus", "1", "--memory", "2048", "--vram", "16" ]
end
end


1.gerrit2ユーザ追加
VM上デgerrit2ユーザを作成する

vagrant@vagrant-ubuntu-trusty-64:~$ sudo adduser gerrit2

Passwordは、ここでは「gerrit2」としておく。
Full Name, Room Number, Work Phone, Home Phone, Other
という項目も聞かれるが、今回は適当な文字列(または空白)でよい。

2.java7のインストール
VMにjava7をインストールする。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
sudo apt-get install oracle-java7-set-default

もう少し前のバージョンのgerritを使った人に聞いたところ
openjdk-7-jre-headlessを入れて使ったといっていた。
どちらでも動くのだろう。


vagrant@vagrant-ubuntu-trusty-64:/vagrant$ which java
/usr/bin/java
vagrant@vagrant-ubuntu-trusty-64:/vagrant$ java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)
vagrant@vagrant-ubuntu-trusty-64:/vagrant$


3.javaのJCE policy fileの準備
Download the unlimited strength JCE policy files.
から、UnlimitedJCEPolicyJDK7.zipをダウンロードして
適当なディレクトリに展開する。

ここでは、ホスト上でzipを取得して、vagrantのVMとホストで共有している
ディレクトリにコピーしている。VM側からみると、/vagrantの下の
サブディレクトリに展開されている。

展開後に出てくるjarを以下のように所定のディレクトリにコピー。
ubuntu以外だとディレクトリは環境にあわせ読み替えがいると思う。


vagrant@vagrant-ubuntu-trusty-64:/vagrant$ ls
UnlimitedJCEPolicy UnlimitedJCEPolicyJDK7.zip Vagrantfile
vagrant@vagrant-ubuntu-trusty-64:/vagrant$ cd /usr/lib/jvm/java-7-oracle/jre/lib/security
vagrant@vagrant-ubuntu-trusty-64:/usr/lib/jvm/java-7-oracle/jre/lib/security$ ls
blacklist java.policy local_policy.jar
cacerts java.security trusted.libraries
javafx.policy javaws.policy US_export_policy.jar
vagrant@vagrant-ubuntu-trusty-64:/usr/lib/jvm/java-7-oracle/jre/lib/security$
vagrant@vagrant-ubuntu-trusty-64:/usr/lib/jvm/java-7-oracle/jre/lib/security$ sudo cp /vagrant/UnlimitedJCEPolicy/*.jar .
vagrant@vagrant-ubuntu-trusty-64:/usr/lib/jvm/java-7-oracle/jre/lib/security$


4.sudoers変更
VM上のgerrit2ユーザでsudoできるように、visudoコマンドで/etc/sudoersを編集する。

sudo groupadd wheel
sudo gpasswd -a gerrit2 wheel
sudo visudo
 → たとえば以下をsudoersファイルの最後尾に追加
%wheel ALL=(ALL) NOPASSWD: ALL
 → wheelグループに所属のユーザは、全てのホストから、全てのユーザになれ、全てのコマンドが実行可能


5.gerritのダウンロード
以下、VM上でgerrit2ユーザになり作業。

sudo su - gerrit2
pwd
 → /home/gerrit2のはず
wget https://gerrit-releases.storage.googleapis.com/gerrit-2.9.3.war
mv gerrit-2.9.3.war gerrit.war


6.mysqlのインストール、設定
gerritのインストール手順のページにあるとおりで基本は
よいのだが、日本語を使うときにgerrit画面上で文字化け
するようなので、charsetの設定は追加しておいた。

sudo apt-get install mysql-server
 → mysql管理ユーザrootのパスワード設定を途中で実施する。仮にパスワードを「mysql」としておくが変更してよい
mysql -uroot -pmysql
mysql> create user 'gerrit2'@'localhost' identified by 'secret';
 → ここでは仮にパスワードを「secret」という文字列にしておくが、好みで変更してよい
mysql> create database reviewdb;
mysql> alter database reviewdb charset=utf8;
mysql> grant all on reviewdb.* to 'gerrit2'@'localhost';
mysql> flush privileges;
mysql> exit


7.gerritの初期設定
VM上で、javaコマンドで、以前ダウンロードしてきたwarファイルを指定して、
gerrit初期設定を実行する。

pwd
 → /home/gerrit2
mkdir gerrit_test
java -jar gerrit.war init -d /home/gerrit2/gerrit_test/


以下、設定内容の例。
ただし、後述のようにリバースプロキシ構成にするため
結局あとで一部設定は書き換える必要がある。

gerrit2@vagrant-ubuntu-trusty-64:~$ java -jar gerrit.war init -d /home/gerrit2/gerrit_test/

*** Gerrit Code Review 2.9.3
***

Create '/home/gerrit2/gerrit_test' [Y/n]? Y

*** Git Repositories
***

Location of Git repositories [git]:

*** SQL Database
***

Database server type [h2]: mysql

Gerrit Code Review is not shipped with MySQL Connector/J 5.1.21
** This library is required for your configuration. **
Download and install it now [Y/n]? Y
Downloading http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar ... OK
Checksum mysql-connector-java-5.1.21.jar OK
Server hostname [localhost]:
Server port [(mysql default)]:
Database name [reviewdb]:
Database username [gerrit2]:
gerrit2's password : ★ここで、mysqlのユーザ作成したときに設定したパスワード(secret)を入力。
confirm password :

*** Index
***

Type [LUCENE/?]:

*** User Authentication
***

Authentication method [OPENID/?]:HTTP
Get username from custom HTTP header [y/N]?
SSO logout URL :

*** Review Labels
***

Install Verified label [y/N]? y

*** Email Delivery
***

SMTP server hostname [localhost]:
SMTP server port [(default)]:
SMTP encryption [NONE/?]:
SMTP username :

*** Container Process
***

Run as [gerrit2]:
Java runtime [/usr/lib/jvm/java-7-oracle/jre]:
Copy gerrit.war to /home/gerrit2/gerrit_test/bin/gerrit.war [Y/n]?
Copying gerrit.war to /home/gerrit2/gerrit_test/bin/gerrit.war

*** SSH Daemon
***

Listen on address [*]:
Listen on port [29418]:

Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v149
If available, Gerrit can take advantage of features
in the library, but will also function without it.
Download and install it now [Y/n]?
Downloading http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar ... OK
Checksum bcpkix-jdk15on-149.jar OK

Gerrit Code Review is not shipped with Bouncy Castle Crypto Provider v149
** This library is required by Bouncy Castle Crypto SSL v149. **
Download and install it now [Y/n]?
Downloading http://www.bouncycastle.org/download/bcprov-jdk15on-149.jar ... OK
Checksum bcprov-jdk15on-149.jar OK
Generating SSH host key ... rsa... dsa... done

*** HTTP Daemon
***

Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address [*]:
Listen on port [8080]:
Canonical URL [http://vagrant-ubuntu-trusty-64:8080/]:

*** Plugins
***

Install plugin download-commands version v2.9.3 [y/N]?
Install plugin reviewnotes version v2.9.3 [y/N]?
Install plugin singleusergroup version v2.9.3 [y/N]?
Install plugin replication version v2.9.3 [y/N]?
Install plugin commit-message-length-validator version v2.9.3 [y/N]?

Initialized /home/gerrit2/gerrit_test
gerrit2@vagrant-ubuntu-trusty-64:~$
gerrit2@vagrant-ubuntu-trusty-64:~$ ls
gerrit_test gerrit.war
gerrit2@vagrant-ubuntu-trusty-64:~$ cd gerrit_test/
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$ ls
bin cache data etc git index lib logs plugins static tmp
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$ ls -l
total 44
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 17:17 bin
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 17:11 cache
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 16:54 data
drwxrwxr-x 3 gerrit2 gerrit2 4096 Dec 18 17:18 etc
drwxrwxr-x 3 gerrit2 gerrit2 4096 Dec 18 17:18 git
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 16:59 index
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 17:10 lib
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 16:54 logs
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 16:54 plugins
drwxrwxr-x 2 gerrit2 gerrit2 4096 Dec 18 16:54 static
drwx------ 2 gerrit2 gerrit2 4096 Dec 18 17:18 tmp
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$


8.gerrit2ユーザのssh鍵ペア作成
ここの作成の仕方も好みで変えてよい。
VM上でgerrit2ユーザになり、たとえば以下を実行。

ssh-keygen -t rsa


あとでホスト上からブラウザでgerritにアクセスした際に
公開鍵登録が要るので、VMの/home/gerrit2/.ssh/の下に
生成されたid_rsa.pubはホスト側にscpコマンドなどでもってきておく。

9.リバースプロキシとしてのapache2の準備
gerritにアクセスしたいユーザの端末と、gerritシステムの間に
リバースプロキシとしてapache2を準備する。
(gerritはバックエンドのwebサーバ上で動作。)

急にapacheが出てきてわかりにくいかもしれないが、
以下のような構成としたい、ということである。
VMのアドレス192.168.33.10を使うと以下のようになる。
user --> reverse proxy --> gerrit
user --> http://192.168.33.10:80// --> http://192.168.33.10:8080/

まずapache2と関連ユーティリティをインストール。
htpasswdは、apache2-utilsに含まれている。
また、proxy_httpを有効にする。

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install apache2-utils
sudo a2enmod proxy_http
sudo service apache2 restart


ブラウザからgerritの画面にアクセスする際に認証で使う、
リバースプロキシとしてのapache2上のアカウントを、
htpasswdコマンドにて作成する。

gerrit2@vagrant-ubuntu-trusty-64:/etc/apache2$ sudo htpasswd -c /etc/apache2/.htpasswd gerrit2
New password: ★なんでもよいが、たとえば「gerrit2」としておく
Re-type new password:
Adding password for user gerrit2
gerrit2@vagrant-ubuntu-trusty-64:/etc/apache2$


apacheは、たとえば以下のような設定にする。
設定できたら、apahce2サービス再起動。

gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$ cat /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerName 192.168.33.10
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

## for gerrit2 (use reverse proxy)
## user --> http://192.168.33.10:80// --> http://localhost:8080/
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<Location /login/ >
AuthType Basic
AuthName "Gerrit Code Review"
Require valid-user
AuthBasicProvider file
AuthUserFile /etc/apache2/.htpasswd
</Location>

AllowEncodedSlashes On
ProxyPass / http://127.0.0.1:8080/
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$ sudo service apache2 restart


ここで、ProxyPassディレクティブは、リモートサーバをローカルサーバの
URLにマッピングするための設定。
ProxyPass [local] [remote]

また、ProxyRequestsディレクティブは、フォワードプロキシリクエスト
(通常の、不特定多数が対象のプロキシ)を有効にするものなので、
ProxyPassを使っているときはProxyRequestsを通常offに設定する。

10.gerrit2システムの設定変更
初期設定を既に実施済みだが、リバースプロキシ構成に
変更するために以下のように設定変更する。

canonicalWebUrlと、listenUrlの設定値を、
apache2の設定と対応づけしないとうまく動かない。

設定できたら、gerrit.shによってgerritコードレビューシステムを起動する。

gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$ cat etc/gerrit.config
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.33.10:80/
[database]
type = mysql
hostname = localhost
database = reviewdb
username = gerrit2
[index]
type = LUCENE
[auth]
type = HTTP
[sendemail]
smtpServer = localhost
[container]
user = gerrit2
javaHome = /usr/lib/jvm/java-7-oracle/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$ ./bin/gerrit.sh start
Starting Gerrit Code Review: OK
gerrit2@vagrant-ubuntu-trusty-64:~/gerrit_test$


11.ブラウザでの初回アクセスとgerrit2ユーザ作成
ホストのブラウザから、http://192.168.33.10:80/
にアクセスして、gerritコードレビューシステムにログインする。

ここでアカウント、パスワードを聞かれるが、
リバースプロキシとしてのapache2を設定したとき
htpasswdで設定したアカウントgerrit2のものを入力する。

ログイン後の画面、http://192.168.33.10/#/register/
にて、gerritシステム上のgerrit2ユーザを、ユーザ登録する。

gerrit-1.png

VM上のgerrit2ユーザで作成した公開鍵は既にホスト側に
取得済みだと思うが、これをテキストエリアにペーストする。

公開鍵ファイルの中身は以下のようなテキストのはず。
エディタなどで開いて、ブラウザ上でペースト。

ssh-rsa AA(以下略、長い文字列) gerrit2@vagrant-ubuntu-trusty-64


gerritシステム上のgerrit2アカウントを登録完了できたら、
初期画面に遷移できる。

12.コードレビューシステム上のユーザやグループ、プロジェクト(gitリポジトリ)の追加
基本的にsshコマンドにて実施する。
VMにログインしてたとえば以下のようにする。

ssh -p 29418 gerrit2@localhost gerrit version
ssh -p 29418 gerrit2@localhost gerrit ls-members Administrators
ssh -p 29418 gerrit2@localhost gerrit create-account hoge
ssh -p 29418 gerrit2@localhost gerrit create-group test-admins
ssh -p 29418 gerrit2@localhost gerrit create-project --empty-commit --name test


あとは、gitリポジトリの作成、レビューとの連携、など
そのあたりを記載していく。




■関連エントリ

関連記事
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

kr2

Author:kr2
ネコと音楽が好き。
CD紹介、技術ネタ
などの雑記帳。

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
最近の記事
最近のコメント
最近のトラックバック
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。