ちょっと前から興味があって探っているソースコードの静的解析ツール。
先日いじったMicrosoft Application Inspector
https://chocopurin.hatenablog.com/entry/2020/05/25/013720
https://chocopurin.hatenablog.com/entry/2020/06/01/223512
に続き、今回はSonarQubeを触ってみました。
オープンソースのCommunity Editionと
有償の3つのEdition(Developer,Enterprise,Data Center)があります。
https://www.sonarqube.org/downloads/
それなりに歴史のあるツールで、プラグイン形式で機能追加できるのが特徴です。
MS Application Inspectorと同様、Dockerから導入可能ということで、
せっかくなので昨日
https://chocopurin.hatenablog.com/entry/2020/06/13/223600
作ったローカル上のAmazon Linux 2のVMイメージでやってみます。
中でElastic Searchが使われているそうで、その兼ね合いでulimit周りに
だいぶいじめられましたが、こんな感じで起動まで行くことができました。
ほかのLinuxディストリビューションで行うときは、事前に
$ sudo sysctl -a
とかで、ホストOSのカーネルパラメータを確認し、SonarQubeの動作要件
https://hub.docker.com/_/sonarqube/
に合わせて微調整する必要があります。
(1)Docker
Gitはあってもなくてもいいと思いますが、
検査対象のソースコード取得で使いそうなので、あえて入れています。
$ sudo yum -y install docker git $ sudo systemctl start docker $ sudo systemctl enable docker
(2)Docker-Compose
docker-composeのURLはこれを書いている時点のものなので、最新版を公式サイトで確認すること。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
(3)docker-compose.yml
https://github.com/SonarSource/docker-sonarqube/blob/master/example-compose-files/sq-with-postgres/docker-compose.yml
に例があるので、これを今回の環境向けに変えていきます。
latestタグを指定しているので、本日時点の最新バージョンである8.3が入りますが、
これにはCNES-Reportというレポート系のプラグインが対応していません。
https://docs.sonarqube.org/latest/instance-administration/plugin-version-matrix/
PDF形式のレポートが欲しいとかになると、8.2より前のバージョンを指定することになります。
version: "2" services: sonarqube: image: sonarqube:latest depends_on: - db ports: - "9000:9000" ulimits: nofile: soft: 65536 hard: 65536 networks: - sonarnet environment: SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar volumes: - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_logs:/opt/sonarqube/logs - sonarqube_temp:/opt/sonarqube/temp db: image: postgres networks: - sonarnet environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar volumes: - postgresql:/var/lib/postgresql # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52 - postgresql_data:/var/lib/postgresql/data networks: sonarnet: driver: bridge volumes: sonarqube_data: sonarqube_extensions: sonarqube_logs: sonarqube_temp: postgresql: postgresql_data:
(4)環境構築
vm.max_map_countは/etc/sysctl.confから恒久的に設定できますが、
ホストOS自体をいじるのではなく、docker系コマンド実行するときのみ
一時的に設定するという方針を取っています。
$ sudo sysctl -w vm.max_map_count=262144 $ sudo docker-compose up -d
(5)動作確認
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xxxxxxxxxxxx sonarqube:latest "bin/run.sh bin/sona…" 45 minutes ago Up 13 minutes 0.0.0.0:9000->9000/tcp ec2-user_sonarqube_1 xxxxxxxxxxxx postgres "docker-entrypoint.s…" 52 minutes ago Up 52 minutes 5432/tcp ec2-user_db_1VirtualBoxのポートフォワーディング設定をしたうえで、ブラウザから
http://localhost:9000
にアクセスすると、初期画面が出てきます。
adminユーザでログインして各種設定をしていけば準備完了です。
(6)その他
コンテナに入ったり、コンテナを再起動するときはこんな感じ。
$ sudo docker exec -it ec2-user_sonarqube_1 /bin/bash $ sudo docker exec -it ec2-user_db_1 /bin/bash
$ sudo docker stop ec2-user_sonarqube_1 $ sudo docker stop ec2-user_db_1 $ sudo sysctl -w vm.max_map_count=262144 $ sudo docker start ec2-user_db_1 $ sudo docker start ec2-user_sonarqube_1