SonarQube 3.6.x (旧名Sonar)のセットアップ手順

本手順は FreeBSD 9.x プラットフォームでの SonarQube 3.6 のセットアップを対象にしています。

SonarQube は、アプリケーションのソースコードをメトリックス解析によって定量的に評価して品質向上を支援するオープンソース製品です。プラグインによって機能拡張が可能で、コミュニティによって多くのプラグインが公開されています。

1. セットアップの内容

  • SonarQubeはNginx(80) + Jetty(8080)の構成で稼動させます
  • データベースはMySQLを使用します
  • ソースコード解析は Apache Ant によって行い、Maven2 を使用しません

※ SonarQube は 公式には Tomcat、Jetty 上で動作するとされていますが、FreeBSD9.x の Tomcat7 ではハングアップして正常に動作しませんでしたので、 Jettyを使用します。

2. 前提作業

Sonarのセットアップには以下の作業が済んでいることが前提になります。

  • OpenJDK7がインストール済みであること
  • Apache Antがインストール済みであること
  • MySQLがインストール済みであること

3. Jettyのインストール

portsを使用して Jetty をインストールします。

cd /usr/ports/www/jetty/
make install

/usr/local/jetty にインストールされます。

vi /etc/rc.conf

以下の記述をrc.conf に追加します。

jetty_enable="YES"

4. データベースのセットアップ

MySQLにスキーマとsonarユーザを作成しアクセス権限を与えます。

mysql -u root -p
create database sonar character set utf8 collate utf8_bin;
CREATE USER 'sonar'@'%' IDENTIFIED BY '****';
GRANT ALL PRIVILEGES ON `sonar`.* TO 'sonar'@'%';
exit;

**** の部分はパスワードです。

5. SonarQube のインストール

SonarQube は Ports がないので手動でインストール作業を行います。

wget http://dist.sonar.codehaus.org/sonar-3.6.zip
unzip sonar-3.6.zip
vi sonar-3.6/conf/sonar.properties

sonar.propertiesをMySQLを使用するように変更する。

sonar.jdbc.username: sonar
sonar.jdbc.password: ****
sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver

**** の部分はパスワードです。

cd sonar-3.6/war
ant -DsonarHome=/home/www/sonar/sonar-3.6/
chown www:www sonar.war
chown -R www:www /home/www/sonar/sonar-3.6/
mv sonar.war /usr/local/jetty/webapp/
/usr/local/etc/rc.d/jetty start

初回起動はデータベースにSonarの使用するテーブルが作成されるので、非常に時間がかかります。

Sonarのアプリケーションログを見ながら待ちます。

tail -f /usr/www/sonar/sonar-3.6/logs/*

6. Nginxの設定を行う

vi /usr/local/etc/nginx/nginx.conf
http{
~ 省略 ~
  upstream sonar-backend {
    server 127.0.0.1:8080;
  }
  server{
    listen  80;
~ 省略 ~
    location /sonar/ {
      proxy_set_header X-FORWARDED-HOST $host;
      proxy_pass http://sonar-backend/sonar/;
  }
}

7. SonarQube の設定を行う

Jetty を起動して 管理者ユーザでSonar のシステム設定を行います。

7.1. ローカライズする

ブラウザでSonar サーバーにアクセスする。

  • http://localhost/sonar

管理者ユーザでログインする。

user:
admin
password:
admin

ログインしたらadminユーザのパスワードは変更しておきましょう。

以下の操作で日本語化プラグインを導入する。

  1. 設定 >> システム
  2. システム >> アップデートセンター
  3. Available Plugins
  4. Localization >> Japanese Pack >> インストール

アプリケーションサーバーを再起動することでプラグインが有効になります。

/usr/local/etc/rc.d/jetty restart

8. 運用手順

起動

/usr/local/etc/rc.d/jetty start

停止

/usr/local/etc/rc.d/jetty stop

解析

対象プロジェクトのディレクトリに移動してAntを実行する。

ant -f build-sonar.xml

ビルドファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<project default="sonar" name="yosbits-core" basedir="." xmlns:sonar="antlib:org.sonar.ant">
<property name="sonar.jdbc.url" 
   value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8" />
<property name="sonar.jdbc.username" value="sonar" />
<property name="sonar.jdbc.password" value="****" />
<property name="sonar.projectKey" value="yosbits:core" />
<property name="sonar.projectName" value="yosbits-core" />
<property name="sonar.projectVersion" value="1.0.0" />
<property name="sonar.language" value="java" />
<property name="sonar.sources" value="src/main/java" />
<property name="sonar.host.url" value="http://localhost/sonar" />
<property name="sonar.sourceEncoding" value="UTF-8" />

<target name="sonar">
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <classpath path="sonar-ant-task-2.1.jar" />
        <classpath path="mysql-connector-java-5.1.24.jar" />
   </taskdef>
    <sonar:sonar />
</target>
</project>

sonar-ant-task-*.jar はここから入手できます。