自分のMac上のDockerにSonar環境を作る


そもそも、ちゃんとCIサーバと連携させて環境作れよって話なんですが、自分用にちょこっとしたものを開発したときに見たいときってありません？あんまりないのかな、そういうこと。
フリーなウェブサービスを使っても良いんですけど、自分用にPCに環境を作ってみました。

## 前提

- dockerが使える状態になっていること。
- 以下、boot2docker上でdockerコンテナを動作させることが前提の説明。

boot2dockerのインストール等、dockerを使う準備はここをみてやっておく。（以下はmacの人向け）
https://docs.docker.com/installation/mac/

## インストール
### sonar用のMySQLをDocker上で起動させる

とりあえず、MySQLをいれておきます。詳細はここを。
https://github.com/tpires/docker-sonar

```bash
$ docker run -i -t -d -p 3306:3306 --name smysql tpires/sonar-mysql
```

### sonarをDocker上で起動させる

続いて、sonar本体を動かすコンテナを起動させます。詳細はここを。
ちなみに、9000は他で使っているので、自分は9090でポートフォワードするようにしています。以下のコマンドはデフォルトではないのでお気をつけて。
https://registry.hub.docker.com/u/mzagar/sonar5/

```
注記：
このバージョンのsonarにバグがあることがわかったので、このDockerfileを使うのではなく、最下部に自分が追記したものを使ったほうが良いかもしれません。
```

```bash
$ docker run -i -t -d --name sonar5 -p 9090:9000 --link smysql:db mzagar/sonar5
```

### 動作確認

上記のコンテナが立ち上がると、以下の感じになっているかと思います。

```bash
$ docker ps
CONTAINER ID        IMAGE                       COMMAND                CREATED             STATUS              PORTS                                                NAMES
429cbe15ccab        mzagar/sonar5:latest        "/opt/sonar/bin/linu   4 seconds ago       Up 3 seconds        0.0.0.0:9090->9000/tcp                               sonar5              
a9cb3072e148        tpires/sonar-mysql:latest   "mysqld_safe"          15 minutes ago      Up 15 minutes       0.0.0.0:3306->3306/tcp                               smysql 
```

以下のコマンドでboot2dockerに割り当てられているIPを調べて、ブラウザでアクセスすると、sonarの画面が出ます。

```bash
$ boot2docker ip
192.168.59.103
```

初期画面はこんな感じ。

![sonar-local.png](https://qiita-image-store.s3.amazonaws.com/0/77141/960dbc48-c3e7-6f26-00ff-122785017555.png "sonar-local.png")

デフォルトのユーザは、admin/adminになっているので、それで右上にあるリンクからログインできます。

## 使ってみる

自分はJava大好き人間なので。。
以下はMavenを使っている場合の設定です。

### pom.xmlを修正する

自分が管理しているMavenプロジェクトのpom.xmlを修正します。propertiesのエリアに以下を追加します。
普通は以下の設定でいけると思いますが、boot2dockerのipが別になっていたり、カスタマイズしている場合は適宜変更します。

```xml
<properties>
    <sonar.host.url>http://192.168.59.103:9090</sonar.host.url>
    <sonar.jdbc.url>jdbc:mysql://192.168.59.103:3306/sonar?useUnicode=true&amp;characterEncoding=utf8&amp;rewriteBatchedStatements=true</sonar.jdbc.url>
    <sonar.jdbc.username>sonar</sonar.jdbc.username>
    <sonar.jdbc.password>123qwe</sonar.jdbc.password>
</properties>
```

### mavenを実行する

普通にsonarを使うときと同様、以下のコマンドを実行。

```bash
$ mvn clean install -DskipTests=true
$ mvn sonar:sonar
```

### ダッシュボードを見てみる

さっきのダッシュボードをリロードすると、何か出てきます。
自分のプロジェクトの情報がアップされています。めでたしめでたし。

あとは自分で好きなようにカスタマイズして良きプロジェクト管理ライフを！

## 追記

と思ったら、sonar5はjavaのプラグイン？にバグがあるっぽく、NullPointerExceptionで落ちてしまうorz。（面倒だったので試してませんが、sonar-maven-pluginのバージョンを古いものにすればうまくいくかも？）
sonar5.1では解決されているというレポートを見つけたので、Dockerfileを自作してsonar5.1にアップデート。一応うまく動くようになったので、その手順を追記します。

### sonar5のコンテナを削除

コンテナを停止させてから削除します。

```bash
$ docker stop sonar5
$ docker rm sonar5
```

### sonar5.1のDockerを起動する

自作Dockerfileは、DockerHubにコミットしておいたので、たぶん以下のコマンドで勝手にpullしてきて、sonar5.1が使えるようになると思います。
いろんなものが本当に便利すぎる世の中だ。。

```bash
$ docker run -i -t -d --name sonar5.1 -p 9090:9000 --link smysql:db todoken/sonar5.1
```

これでOK。
ちなみに、古いバージョンでrunさせてしまった場合、以下のURLにアクセスすると自動でDBをアップデートしてくれます。

```
http://192.168.59.103:9090/setup
```

一応、バックアップとか取ったほうが良いと思います。詳しくは以下を参照。
http://docs.sonarqube.org/display/SONAR/Setup+and+Upgrade