0
2

More than 3 years have passed since last update.

SonarQubeで静的解析(Java, Go, TypeScript)

Last updated at Posted at 2020-09-12

目標

  • Java, Go, TypeScript を利用するプロジェクトで SonarQube を利用して静的解析を行う

概要

  • macOS 上に docker-machine, docker-compose で sonarqube のサーバーを立てる
  • docker-machine の driver には VirtualBox を利用する
  • テストカバレッジを SonarQube に与える設定は行わない
  • SonarQube のサーバーを macOS 上に立てて、各プロジェクトに scanner を設定して実行する。scanner の設定方法が言語によって違う

SonarQube サーバーを立てる

開発元が作っている docker-compose.yml をコピーしておく。
https://github.com/SonarSource/docker-sonarqube/blob/master/example-compose-files/sq-with-postgres/docker-compose.yml

以下の手順で実行する

# docker-machine作成
docker-machine create default
# docker-machine起動
docker-machine start default
# sonarqubeが利用するElasticsearchを実行するためにパラメーターを変更
docker-machine ssh default "sudo sysctl -w vm.max_map_count=262144"
# 環境変数設定
eval $(docker-machine env default)
# IPアドレスを確認する(以下の例では192.168.99.100だとして例示する)
docker-machine ip
# sonarqube起動
docker-compose up -d
# ブラウザで開く(admin/admin でログイン可能)
open http://`(docker-machine ip)`:9000/
# 停止するときはCtrl+C
docker-compose rm
docker-machine stop

Java の場合の実行方法

事前に ~/.m2/settings.xml に設定をしておく。<sonar.host.url>の部分はdocker-machine ipの IP を指定する

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <offline/>
  <servers/>
  <mirrors/>
  <proxies/>
  <activeProfiles/>
  <pluginGroups>
    <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
  </pluginGroups>
  <profiles>
    <profile>
      <id>sonar</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <sonar.host.url>
        http://192.168.99.100:9000
        </sonar.host.url>
      </properties>
    </profile>
  </profiles>
</settings>

実行する

mvn clean verify sonar:sonar -Dmaven.test.skip=true

Go の場合の実行方法

sonar-scanner を導入する

brew install sonar-scanner

sonar-project.properties を作成する

sonar.projectKey=com.company.projectkey1
sonar.projectName=My Project Name

sonar.sources=.
sonar.exclusions=**/*_test.go,**/vendor/**
sonar.tests=.
sonar.test.inclusions=**/*_test.go
sonar.test.exclusions=**/vendor/**

実行する

# sonar-scannerの導入
brew install sonar-scanner
# 実行する
sonar-scanner -Dsonar.host.url=http://192.168.99.100:9000

TypeScript の場合

sonar-scanner を実行するためのパッケージを導入する

npm install -D sonarqube-scanner

sonar-scanner を実行するためのスクリプトを作成する. sonar-project.jsという名前で作成する

const sonarqubeScanner = require("sonarqube-scanner");
sonarqubeScanner(
  {
    serverUrl: "http://192.168.99.100:9000",
    options: {
      "sonar.sources": "./src",
    },
  },
  () => {}
);

package.json のscriptsに以下を追加する

"sonar": "node sonar-project.js"

実行する

npm run sonar
0
2
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
0
2