21
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DockerでSonarQubeを入れる

Last updated at Posted at 2020-05-10

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

大まかなやり方

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

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

手順3は、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

Log inボタンを押して、SonarQubeにログインします。
初期アカウントは、ユーザ:admin、パスワード:adminです。
コメント 2020-05-10 174114.jpg

プロジェクトを作る

早速プロジェクトを作りましょう。
Create new projectボタンを押します。
コメント 2020-05-10 174302.jpg

Project Key(プロジェクトの名前)を入力します。
Display nameは自動で入力されます。
Set Upボタンを押して次に進みます。
コメント 2020-05-10 174659.jpg

Sonar-scanner(後で入れます)がSonarQubeにアクセスするためのトークンを作ります。
お好みのユーザ名を入れて、Generateボタンを押します。
コメント 2020-05-10 174851.jpg

トークンが作られたらContinueボタンを押します。
コメント 2020-05-10 174903.jpg

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

DocumentのLinux64-bitのリンクをコピーしておきます。
このリンクが、Sonar-scannerのダウンロードリンクです。
Inkedコメント 2020-05-10 175736_LI.jpg

ダウンロード

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

コンテナにはwgetが無ければunzipも無いので、必要なパッケージはあらかじめインストールしておくと良いです。
最低限必要なのは、wgetunzipです。
私は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

ダウンロードできたら、unzipして展開します。
# unzip sonar-scanner-cli-4.3.0.2102-linux.zip
展開すると、sonar-scannerのディレクトリが出来ます。
このディレクトリ配下にbinがあり、その中にsonar-scannerコマンドが入っています。
コメント 2020-05-10 183431.jpg

sonar-scannerコマンドが使えるように.bashrcにパスの設定をします。
# vim ~/.bashrc
コメント 2020-05-10 183145.jpg
設定し終えたら、.bashrcを再読み込みします。
# source ~/.bashrc

コード解析を行う

sonar2コンテナに、解析したいソースコードを置いておきましょう。
私は、/opt/followcheck_web 配下のソースコードを解析します。
コメント 2020-05-10 184203.jpg

解析したいソースコードのディレクトリに入ります。
# cd /opt/followcheck_web/
続いて、Sonar-scannerコマンドを打ちます。
難しい事はありません。SonarQubeの画面に表示されていたコマンドをコピペするだけです。
コメント 2020-05-10 184442.jpg
コマンドを叩いて、少し待ちます。
ソースコードの量によっては時間がかかると思います。
EXEXUTION SUCCESSが表示されたら、解析完了です。
コメント 2020-05-10 184551.jpg

解析結果を見る

SonarQubeに戻りましょう。
自動的に画面がリロードされて、sonar-scannerで解析した結果が表示されます。
cronとかでjobを作って、定期的に解析させておくと良いでしょうね。
もしくは、Githubを使っているのなら、webhookを使って自動で解析させるとか。
コメント 2020-05-10 184756.jpg

おまけ:SonarQubeを日本語化する

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

Japanese Packプラグインのインストール方法。
コメント 2020-05-10 185242.jpg

日本語化した結果。
コメント 2020-05-10 185359.jpg

21
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?