そもそも、ちゃんとCIサーバと連携させて環境作れよって話なんですが、自分用にちょこっとしたものを開発したときに見たいときってありません?あんまりないのかな、そういうこと。
フリーなウェブサービスを使っても良いんですけど、自分用にPCに環境を作ってみました。
前提
- dockerが使える状態になっていること。
- 以下、boot2docker上でdockerコンテナを動作させることが前提の説明。
boot2dockerのインストール等、dockerを使う準備はここをみてやっておく。(以下はmacの人向け)
https://docs.docker.com/installation/mac/
インストール
sonar用のMySQLをDocker上で起動させる
とりあえず、MySQLをいれておきます。詳細はここを。
https://github.com/tpires/docker-sonar
$ 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を使うのではなく、最下部に自分が追記したものを使ったほうが良いかもしれません。
$ docker run -i -t -d --name sonar5 -p 9090:9000 --link smysql:db mzagar/sonar5
動作確認
上記のコンテナが立ち上がると、以下の感じになっているかと思います。
$ 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の画面が出ます。
$ boot2docker ip
192.168.59.103
初期画面はこんな感じ。
デフォルトのユーザは、admin/adminになっているので、それで右上にあるリンクからログインできます。
使ってみる
自分はJava大好き人間なので。。
以下はMavenを使っている場合の設定です。
pom.xmlを修正する
自分が管理しているMavenプロジェクトのpom.xmlを修正します。propertiesのエリアに以下を追加します。
普通は以下の設定でいけると思いますが、boot2dockerのipが別になっていたり、カスタマイズしている場合は適宜変更します。
<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&characterEncoding=utf8&rewriteBatchedStatements=true</sonar.jdbc.url>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>123qwe</sonar.jdbc.password>
</properties>
mavenを実行する
普通にsonarを使うときと同様、以下のコマンドを実行。
$ mvn clean install -DskipTests=true
$ mvn sonar:sonar
ダッシュボードを見てみる
さっきのダッシュボードをリロードすると、何か出てきます。
自分のプロジェクトの情報がアップされています。めでたしめでたし。
あとは自分で好きなようにカスタマイズして良きプロジェクト管理ライフを!
追記
と思ったら、sonar5はjavaのプラグイン?にバグがあるっぽく、NullPointerExceptionで落ちてしまうorz。(面倒だったので試してませんが、sonar-maven-pluginのバージョンを古いものにすればうまくいくかも?)
sonar5.1では解決されているというレポートを見つけたので、Dockerfileを自作してsonar5.1にアップデート。一応うまく動くようになったので、その手順を追記します。
sonar5のコンテナを削除
コンテナを停止させてから削除します。
$ docker stop sonar5
$ docker rm sonar5
sonar5.1のDockerを起動する
自作Dockerfileは、DockerHubにコミットしておいたので、たぶん以下のコマンドで勝手にpullしてきて、sonar5.1が使えるようになると思います。
いろんなものが本当に便利すぎる世の中だ。。
$ 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