ヒトリ歩き

愚痴とかいろいろ書きます

JenkinsからSonarQubeを実行するよ

前回、SonarQubeをセットアップできたので、Jenkinsと連携させてみることにしました。
連携させることで、ビルド、テスト、リリースと一緒にソースコードに問題がないかチェックする
仕組みが出来上がります。

前提条件

GitHubからCloneするGradleの定義ファイルにSonarQubeのアカウント情報を設定しています。
Gradleの定義ファイルにSonarQubeのアカウント情報を設定していない場合は、Jenkins側で設定する必要があると思います。

Jenkinsの設定

始めに、Jenkins側の設定をします。

プラグインのインストール

Jenkinsの管理 -> プラグインの管理
SonarQube Scanner for Jenkins をインストールします。

JenkinsにSonarQubeの情報を登録

Jenkinsの管理 -> システムの設定
SonarQube servers まで移動する。
Environment variables のチェックボックスにチェックをいれる。
SonarQube installationsに必要事項を入力し、[保存]ボタンを押下します。

Name: SonarQube
Server: http://SonarQubeサーバのURL

f:id:kotapontan:20200216214935p:plain

SonarQubeの設定

SonarQubeのWebhookの設定をします。

Administration -> Configuration -> Webhooks
[Create]ボタンを押下します。

必要事項を入力し、[Create]ボタンを押下します。
Name: Jenkins
URL: http://JenkinsサーバのURL/sonarqube-webhook/

f:id:kotapontan:20200216215105p:plain

パイプラインの設定

Jenkinsのパイプラインを設定します。
withSonarQubeEnvのパラメータは、Jenkinsの設定で指定したSonarQubeの名前を指定します。

パイプラインの定義は、以下のとおり。

pipeline {
    agent any
    stages {
        stage('SCM') {
            steps {
                git credentialsId: 'xxxx', url: 'https://github.com/xxxx/xxxxx.git'
            }
        }
        stage('build && SonarQube analysis') {
            steps {
                withSonarQubeEnv('SonarQube') {
                    sh './gradlew sonarqube'
                }
            }
        }
        stage("Quality Gate") {
            steps {
                timeout(time: 1, unit: 'HOURS') {
                    // Parameter indicates whether to set pipeline to UNSTABLE if Quality Gate fails
                    // true = set pipeline to UNSTABLE, false = don't
                    waitForQualityGate abortPipeline: true
                }
            }
        }
    }
}

実行してみよう

パイプラインを実行した結果です。
SonarQubeマークをクリックすると、SonarQubeにジャンプして詳細を確認することができます。

f:id:kotapontan:20200216215702p:plain

Quality Gateの結果をちゃんと表示されます。

f:id:kotapontan:20200216215854p:plain

最後に

JenkinsとSonarQubeを使用しているなら、連携はさせておくべきです。
Quality Gateという品質基準の設定が可能というSonarQubeはなかなか優秀ですね。
次のプロジェクトでは必ず使おうと思います。