おおよそ以下のURLで説明されているとおり。
https://docs.sonarqube.org/display/PLUG/SonarGo

自分の環境ではsonar-scannerを使わずにgradle + sonarqube pluginを用いている。
gradle wrapperをリポジトリに含めておけば、java以外の事前準備なしで実行できる(ネットにつながる前提で)。

先にgo testしてカバレッジ/テスト結果をファイル出力しておき、SonarQubeに吸い上げる。

build.gradle

plugins {
    id "org.sonarqube" version "2.6.2"
}

sonarqube {
    properties {
        property "sonar.projectName", "PROJECT-NAME"
        property "sonar.projectVersion", "1.0.0"

        property "sonar.go.coverage.reportPaths", "reports/coverage.out"
        property "sonar.go.tests.reportPaths", "reports/test.json"

        property "sonar.sources", "."
        // Exclude code generated by stringer.
        property "sonar.exclusions", "**/*_test.go,**/*_string.go,**/vendor/**"
        property "sonar.tests", "."
        property "sonar.test.inclusions", "**/*_test.go"
        property "sonar.test.exclusions", "**/vendor/**"
    }
}

SonarQubeがgradleタスクを実行するlinuxと同じ環境(http://localhost:9000)で動いている前提。 stringer生成コードを無視する想定でsonar.exclusionsに「*_string.go」指定している。

Makefile(抜粋)

test:
	go test -coverprofile=reports/coverage.out -json > reports/test.json

カバレッジ/テスト結果の出力形式は以下のページを参照。
https://docs.sonarqube.org/display/PLUG/Go+Coverage+Results+Import
https://docs.sonarqube.org/display/PLUG/Unit+Tests+Results+Import

テストとsonarqubeタスク実行

$ make test
$ ./gradlew sonar

ルートパッケージにテストコードがあると以下のエラーが出て上手く拾ってくれない。デフォルトGOPATHの場合でも環境変数GOPATH=~/goを明示設定しておくと拾ってくれる。

Failed to find test file for package github.com/tckz/go-split and test TestDecorateReaderNoCompression

ディレクトリ階層(抜粋)

  ~/go <-- $GOPATH
      src/
        github.com/
          tckz/
            go-split/
              Makefile
              build.gradle
              gradlew 
              gradle/
                wrapper/ <-- Gradle wrapper実体
                  ...省略
              split_test.go <-- 非mainパッケージ

環境

  • CentOS 7.5 x64
    • go 1.11.1
    • openjdk version 1.8.0_181
      • SonarQube Community Edition 7.3.0.15553
        • SonarGo 1.1.0 (build 1612)
    • GNU Make 3.82