Ubuntu 18.10: GitコードレビューツールのGerritをインストールする

Gerritのインストール方法について記載します。

1 Gerritをインストールする

個人の開発でJenkinsと連携するだけの為に使う場合は認証方法は DEVELOPMENT_BECOME_ANY_ACCOUNTのままで良いでしょう。

以下のスクリプトはGerritをインストールします。

#!/bin/sh -e


# Access to http://<hostname>:8080/.
cat <<EOF | sudo tee /etc/apt/sources.list.d/gerritforge.list
deb [trusted=yes] http://deb.gerritforge.com/ gerrit contrib
EOF
sudo apt update -y
sudo apt install -y openjdk-8-jdk haveged
sudo apt install -y gerrit
sudo systemctl enable gerrit haveged
sudo reboot

以下のURLにアクセスします。

http://<hostname>:8080

初期ページが表示されます。

0001_Welcome.png

DEVELOPMENT_BECOME_ANY_ACCOUNTではどのユーザにもなることができます。

0002_auth-DEVELOPMENT_BECOME_ANY_ACCOUNT.png

git cloneはHTTP経由でもSSH経由でも実行できます。

$ git clone http://<hostname>:8080/<project>.git
$ git clone ssh://<hostname>:49128/<project>.git

2 認証方法をHTTPに変更する

クローズドな環境、少人数の開発体制、LDAPが用意されていない場合は、認証方法をHTTPにしても良いでしょう。

ApacheのDigest認証のユーザ名とパスワードがGerritのユーザ名とパスワードとなります。

以下のスクリプトはインストールしたGerritの認証方法をHTTPに変更して、 Apacheをセットアップします。

#!/bin/sh -e


GERRIT_ADMIN_PASSWD=gerrit
PORT=8080
FQDN=$(hostname -f)

# Make gerrit to accept only http://localhost:8080/ but to recognize
# http://<hostname>/ as web site URL.
sudo cp /etc/gerrit/gerrit.config /etc/gerrit/gerrit.config.orig
sudo sed -i /etc/gerrit/gerrit.config \
-e "s;type = DEVELOPMENT_BECOME_ANY_ACCOUNT;type = HTTP;g" \
-e "s;canonicalWebUrl = .*;canonicalWebUrl = http://${FQDN}/;g" \
-e "s;listenUrl = .*;listenUrl = proxy-http://localhost:${PORT}/;g" \
-e "s;firstTimeRedirectUrl = \(.*\);;g"
# If gerrit.service is enabled and still not complete to start, wait it.
while [ "$(systemctl is-active gerrit.service)x" = "activatingx" ]; do
  sleep 1
done
sudo systemctl restart gerrit

# Make apache to map http://<hostname>/ to http://localhost:8080/.
sudo apt install -y apache2
sudo systemctl enable apache2
cat <<EOF | sudo tee /etc/apache2/sites-available/gerrit.conf
ProxyPass        / http://localhost:${PORT}/ nocanon
ProxyPassReverse / http://localhost:${PORT}/ nocanon
ProxyRequests    Off

<Proxy http://localhost:${PORT}/>
  Order deny,allow
  Allow from all
</Proxy>

<Location />
  AuthType Digest
  AuthName "gerrit"
  AuthUserFile /etc/apache2/.htdigest
  Require valid-user
</Location>
EOF
sudo a2enmod proxy_http
sudo a2enmod auth_digest
sudo a2ensite gerrit
sudo systemctl restart apache2

# Add gerrit user. You need to add htdigest for each user.
sudo apt install -y expect
expect -c "
set timeout -1
spawn sudo htdigest -c /etc/apache2/.htdigest gerrit admin
expect \"New password: \"
send \"${GERRIT_ADMIN_PASSWD}\n\"
expect \"Re-type new password: \"
send \"${GERRIT_ADMIN_PASSWD}\n\"
expect eof
"

以下のURLにアクセスします。

http://<hostname>

Digest認証のダイアログが表示されます。

0003_DigestAuthToAdmin.png

adminユーザでログインできました。

0004_auth-HTTP.png

git cloneはHTTP経由でもSSH経由でも実行できます。 HTTP経由の場合はDigest認証のユーザ名とパスワードが必要になります。

$ git clone http://<hostname>/gerrit/<project>.git
$ git clone ssh://<hostname>:49128/<project>.git

新規にユーザを追加する場合はhtdigestでエントリを追加する必要があります。

$ sudo htdigest /etc/apache2/.htdigest "gerrit" ${USER}
Adding user hiroom2 in realm gerrit
New password:
Re-type new password:

追加したユーザでDigest認証を実施します。

0005_DigestAuthToUser.png

ユーザのプロファイルページが表示されます。

git-reviewやSSH経由のgit cloneで使うSSH公開鍵を登録します。 emailは~/.gitconfigに記載されたものを登録します。

0006_UserProfile.png