DockerでSonarQubeを入れる

Dockerを使ってSonarQubeを構築したので、備忘録としてやり方を残しておきます。

# 大まかなやり方
SonarQubeは自分で構築しようと思うと、DBを入れたり、Javaを入れたりと、何かと手順を踏まなければなりません。
Dockerが使えるのであれば、Dockerを使ってSonarQubeを入れるのが楽です。
大まかなやり方は、下記の通り。

１．SonarQubeの公式イメージからコンテナを作成。
２．ブラウザでSonarQubeにアクセスしてProjectを作る。
３．SonarQubeコンテナにログインしてSonar-scannerをダウンロード、配置する。
４．Sonar-scannerを使ってコード解析する。

手順３は、Sonar-scannerのDockerイメージからコンテナをもう1個作るのが、公式で案内されている手順です。
しかし私は、SonarQubeを動かすのにコンテナ2つを稼働させるのが嫌だったので、このような手順で構築しました。

# SonarQubeのコンテナを作る
SonarQubeは公式イメージが公開されています。
https://hub.docker.com/_/sonarqube
コンテナを作るだけで直ぐにSonarQubeの画面が見れる優れモノです！
（ただ画面が見れるだけで、まだ解析はできません。）

docker runして、早速コンテナを作りましょう。
`$ docker run -itd --name sonar2 -p 9001:9000 sonarqube:lts`

私の場合、既にsonarqubeのコンテナが有るので、コンテナ名をsonar2にしています。
SonarQubeのポートは9000なので、ポートフォワーディング(-pオプション)で9000ポートに繋ぎましょう。
私の場合は、9001ポートで待ち受けて、9000ポートに繋いでいます。

# SonarQubeにログイン
コンテナを作ったら早速ブラウザでアクセスします。
SonarQubeの画面が表示されます。
`http://[サーバのホストorIPアドレス]:9001`
![コメント 2020-05-10 173757.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/9e7ad7ae-cc38-645e-4284-efdb57a5ce31.jpeg)

Log inボタンを押して、SonarQubeにログインします。
初期アカウントは、`ユーザ：admin、パスワード：admin`です。
![コメント 2020-05-10 174114.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/cf98ff50-23f2-a3f8-e9af-8fb248de219e.jpeg)

# プロジェクトを作る
早速プロジェクトを作りましょう。
Create new projectボタンを押します。
![コメント 2020-05-10 174302.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/da56cd54-75f2-27c4-4783-ccc4c2f98b73.jpeg)

Project Key（プロジェクトの名前）を入力します。
Display nameは自動で入力されます。
Set Upボタンを押して次に進みます。
![コメント 2020-05-10 174659.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/81470e42-6d31-070b-4bf1-53f3b2ee238c.jpeg)

Sonar-scanner（後で入れます）がSonarQubeにアクセスするためのトークンを作ります。
お好みのユーザ名を入れて、Generateボタンを押します。
![コメント 2020-05-10 174851.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/bd7b23b9-09cc-7b18-bdf5-3ae66a25f2bc.jpeg)

トークンが作られたらContinueボタンを押します。
![コメント 2020-05-10 174903.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/14eaa4fc-9848-aa5b-1105-b8d0a839223e.jpeg)

# Sonar-scannerのインストール
## ダウンロードリンクの取得
トークンを作ると、解析する言語と環境を聞かれます。
JavaはSonar-scanner無しでも解析できるっぽいですが、C# or VB.NETと、OtherはSonar-scannerが必要です。
私はPHPを解析します。
※C# or VB.NETは手順が違うようなので注意。以下、Otherを選択した場合の手順となります。

Downloadボタンを押すと、公式のSonar-scannerのDocumentに飛びます。
一応リンク貼っときます。
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
![コメント 2020-05-10 175219.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/3829f4be-f712-931e-d3bd-bf6459bfceb7.jpeg)

DocumentのLinux64-bitのリンクをコピーしておきます。
このリンクが、Sonar-scannerのダウンロードリンクです。
![Inkedコメント 2020-05-10 175736_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/c4615497-6b37-e7ce-8203-c746af4ebd26.jpeg)

## ダウンロード
SonarQubeのコンテナで、Sonar-scannerをダウンロードします。
sonar2コンテナにログインしましょう。
ユーザ指定(-u)しないと、sudo権限がないsonarユーザになってしまいますので、-uオプションは忘れずに。
`$ docker exec -it -u root sonar2 bash`

コンテナには`wget`が無ければ`unzip`も無いので、必要なパッケージはあらかじめインストールしておくと良いです。
最低限必要なのは、`wget`と`unzip`です。
私はGithubからソースコードを落としたいので`git`もインストールします。
PATHを通すのに`.bashrc`を編集したいので、`vim`もインストールしておきます。
`# apt update -y`
`# apt upgrade -y`
`# apt install wget unzip vim git -y`

インストールが終わったら、Sonar-scannerのzipファイルを`wget`でダウンロードします。
`wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.3.0.2102-linux.zip`
![コメント 2020-05-10 181523.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/9a3dad02-eb54-f6ef-9b52-40cffa851741.jpeg)

ダウンロードできたら、`unzip`して展開します。
`# unzip sonar-scanner-cli-4.3.0.2102-linux.zip`
展開すると、sonar-scannerのディレクトリが出来ます。
このディレクトリ配下にbinがあり、その中に`sonar-scanner`コマンドが入っています。
![コメント 2020-05-10 183431.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/2049dfb8-9f9d-5c9b-1328-7aadc19518bd.jpeg)


`sonar-scanner`コマンドが使えるように`.bashrc`にパスの設定をします。
`# vim ~/.bashrc`
![コメント 2020-05-10 183145.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/e2b0e9ad-03bc-a153-afbc-fa747885cd21.jpeg)
設定し終えたら、`.bashrc`を再読み込みします。
`# source ~/.bashrc`
# コード解析を行う
sonar2コンテナに、解析したいソースコードを置いておきましょう。
私は、/opt/followcheck_web 配下のソースコードを解析します。
![コメント 2020-05-10 184203.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/b427bb79-cd65-e0a7-80db-f11e5e3af85b.jpeg)

解析したいソースコードのディレクトリに入ります。
`# cd /opt/followcheck_web/`
続いて、Sonar-scannerコマンドを打ちます。
難しい事はありません。SonarQubeの画面に表示されていたコマンドをコピペするだけです。
![コメント 2020-05-10 184442.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/39909385-5de9-37b1-8e62-c96299e1759b.jpeg)
コマンドを叩いて、少し待ちます。
ソースコードの量によっては時間がかかると思います。
`EXEXUTION SUCCESS`が表示されたら、解析完了です。
![コメント 2020-05-10 184551.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/e678b4fe-aa97-e101-7c5a-0368ad9e24a1.jpeg)

# 解析結果を見る
SonarQubeに戻りましょう。
自動的に画面がリロードされて、`sonar-scanner`で解析した結果が表示されます。
cronとかでjobを作って、定期的に解析させておくと良いでしょうね。
もしくは、Githubを使っているのなら、webhookを使って自動で解析させるとか。
![コメント 2020-05-10 184756.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/456dd330-61d5-fe9f-d157-1b078fad57d5.jpeg)



# おまけ：SonarQubeを日本語化する
Japanese Packプラグインをインストールすると、画面を日本語化出来ます。
ただ、最新のバージョンに対応していないのか、中途半端にしか日本語化されません。
個人的には、日本語と英語が入り混じって逆に見づらくなるので、別に日本語化しなくても良いかなって思います。

Japanese Packプラグインのインストール方法。
![コメント 2020-05-10 185242.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/bcb2ecf9-efc6-06eb-d863-5414881bc6d3.jpeg)

日本語化した結果。
![コメント 2020-05-10 185359.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520421/de0beae0-c0e2-c32a-c711-c94aed517761.jpeg)