SonarQubeを使ったコード解析
1概要
この記事では、コード品質を保証するためのオープンソースプラットフォームであるhttps://www.sonarqube.org/[SonarQube]を使用して静的ソースコード分析を検討します。
まずは中心的な質問から始めましょう – 最初にソースコードを分析するのはなぜですか?非常に簡単に言えば、プロジェクトの寿命にわたって品質、信頼性、および保守性を確保するためです。適切に記述されていないコードベースは、常に維持するのに費用がかかります。
それでは、まずhttps://www.sonarqube.org/downloads/[ダウンロードページ]から最新のLTS版のSonarQubeをダウンロードし、このhttps://docs.sonarqubeに概説されているようにローカルサーバーを設定しましょう。 org/display/SONAR/Get + Started + in + Two + Minutes[クイックスタートガイド]。
2ソースコードの分析
.
プロジェクトを分析する時点で、このトークンを後で使用します。また、プロジェクトの主言語(Java)とビルドテクノロジ(Maven)を選択する必要があります。
pom.xml
でプラグインを定義しましょう。
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
</plugin>
</plugins>
</pluginManagement>
</build>
このプラグインの最新バージョンはhttps://search.maven.org/classic/#search%7C1%7Cg%3A%22org.sonarsource.scanner.maven%22%20AND%20a%3A%22sonar-mavenで入手できます。 -plugin%22[ここ]。
それでは、プロジェクトディレクトリのルートからこのコマンドを実行してスキャンする必要があります。
mvn sonar:sonar -Dsonar.host.url=http://localhost:9000
-Dsonar.login=the-generated-token
生成されたtoken__を上のトークンに置き換える必要があります。
-
この記事で使用したプロジェクトはhttps://github.com/eugenp/tutorials/tree/master/cas/cas-secured-app[here].** にあります。
Mavenプラグインのパラメータとして、SonarQubeサーバのホストURLとログイン(生成されたトークン)を指定しました。
コマンドを実行した後、結果はProjectsダッシュボードの
http://localhost:9000
に表示されます。
Mavenプラグインに渡すことができる、あるいはWebインターフェースから設定することができる他のパラメータがあります。
__sonar.host .
url、
sonar.projectKey
、および
sonar.sources__は必須ですが、その他はオプションです。
その他の分析パラメータとそのデフォルト値はhttps://docs.sonarqube.org/display/SONAR/Analysisパラメータです[ここ]。
また、各言語プラグインには互換性のあるソースコードを分析するための規則があります。
3分析結果
最初のプロジェクトを分析したので、
http://localhost:9000
のWebインターフェースにアクセスしてページを更新します。
レポートの概要が表示されます。
発見された問題は、バグ、脆弱性、コードの臭い、対象範囲、または重複のいずれかです。各カテゴリには、対応する課題数またはパーセンテージ値があります。
さらに、問題には5つの異なる重大度レベルの1つがあります。
blocker、critical、major、minor
、および
info.
プロジェクト名の直前には、Quality Gateのステータスを示すアイコンが表示されます。合格(緑)または失敗(赤)です。
プロジェクト名をクリックすると専用のダッシュボードが表示され、そこでプロジェクト固有の問題をより詳細に調査できます。
プロジェクトダッシュボードからプロジェクトコード、アクティビティ、および管理タスクを確認できます。それぞれ別々のタブで利用できます。
グローバルな[発行]タブがありますが、プロジェクトダッシュボードの[発行]タブには、関連するプロジェクトだけに固有の問題が表示されます。
問題タブには、カテゴリ、重大度、タグ、および問題を修正するために必要な計算時間(時間に関して)が常に表示されます。
issueタブから、他のユーザにissueを割り当て、それにコメントし、そしてその重大度を変更することが可能です。問題自体をクリックすると、問題に関する詳細が表示されます。
issueタブの左側には洗練されたフィルタがあります。これらは問題の特定に適しています。では、コードベースが本番環境への展開に十分なほど健全であるかどうかをどうやって知ることができるでしょうか。それがクオリティゲートの目的です。
4 SonarQubeクオリティゲート
このセクションでは、SonarQubeの主な機能であるQuality Gateについて見ていきます。それからカスタムの設定方法の例を見ることになります。
4.1. クオリティゲートとは何ですか?
Quality Gateは、プロジェクトが本番リリースの対象となる前に満たす必要がある一連の条件です。それは1つの質問に答えます:私は現在の状態で本番環境にコードをプッシュすることができますか。
既存のコードを修正しながら「新しい」コードのコード品質を保証することは、長期にわたって優れたコードベースを維持するための1つの良い方法です。 。
Quality Gateで設定された条件は、まだ変更されていないコードセグメントに影響します。新しい問題が発生するのを防ぐことができれば、やがてすべての問題になります。
このアプローチは、ソースからのhttps://docs.sonarqube.org/display/SONAR/Fixing+the+Water+Leak[漏水の修正]に匹敵します。
これは私達を特定の用語にします – リーク期間。これは、プロジェクトの2つの分析/バージョン間の期間です
。
同じプロジェクトで分析を再実行すると、プロジェクトダッシュボードの[Overview]タブにリーク期間の結果が表示されます。
Webインターフェースから、Quality Gatesタブは定義されたすべてのQuality Gateにアクセスできる場所です。デフォルトでは、
SonarQube way
はサーバーにプレインストールされています。
SonarQube way
のデフォルト設定では、次の場合にコードに失敗のフラグが付けられます。
-
新しいコードの網羅率は80%未満
-
新しいコードの重複行の割合が3より大きい
-
保守性、信頼性、またはセキュリティ評価がAより悪い
このことを理解した上で、カスタムQuality Gateを作成することができます。
4.2. カスタムクオリティゲートの追加
まず、
Quality Gates
タブをクリックし、次にページの左側にある
Create
ボタンをクリックします。
baeldung
という名前を付ける必要があります。
これで、必要な条件を設定できます。
-
[条件の追加]プルダウンから、[
問題をブロックする
]を選択します;すぐに条件の一覧に表示されます。
Operatorとして
より大きい
を指定し、
Error
列にゼロ(0)を設定して
Over Leak Period__列をチェックします。
-
それから
Add
ボタンをクリックして変更を有効にします** 。上記と同じ手順で別の条件を追加しましょう。
[条件の追加]プルダウンから[発行数]を選択し、[リーク期間]列を確認します。
O
__perator
列の値は「
より小さい」
に設定され、
Error__列の値として1を追加します。これは、追加された新しいコードの問題数が1未満の場合、Quality Gateをfailedとマークすることを意味します。
これは技術的には意味がありませんが、学習のために使用しましょう。ルールを保存するには、必ず[追加]ボタンをクリックしてください。
-
最後のステップとして、カスタムQuality Gateにプロジェクトを添付する必要があります。
そのためには、ページをプロジェクトセクションまでスクロールしてください。
そこでAllをクリックして、選択したプロジェクトにマークを付けます。ページの右上隅からデフォルトのQuality Gateとして設定することもできます。
前と同じように、Mavenコマンドを使用して、プロジェクトのソースコードをもう一度スキャンします。これが完了したら、[プロジェクト]タブに移動して更新します。
今回は、プロジェクトはQuality Gateの基準を満たさず、失敗します。どうして?私たちのルールの1つでそれを指定しているので、新しい問題がない場合は失敗するはずです。
[品質ゲート]タブに戻り、
issues
の条件を
is than
に変更します。この変更を有効にするには更新ボタンをクリックする必要があります。
ソースコードの新しいスキャンは、今度は過ぎます。
5 SonarQubeをCI
に統合する
SonarQubeをContinuous Integrationプロセスの一部にすることは可能です。
コード分析がQuality Gate条件を満たさなかった場合、これは自動的にビルドを失敗させます。
これを実現するために、クラウドでホストされているSonaQubeサーバーのバージョンであるhttps://about.sonarcloud.io/[SonarCloud]を使用します。アカウントhttps://sonarcloud.io/sessions/new[here]を作成できます。
[マイアカウント]>[組織]から、組織キーを確認できます。これは通常、
xxxx-github
または
xxxx-bitbucket
の形式になります。
また、[マイアカウント]>[セキュリティ]から、サーバーのローカルインスタンスで行ったようにトークンを生成できます。後で使用するために、トークンと組織キーの両方に注意してください。
この記事では、Travis CIを使用し、既存のGithubプロファイルを使用してアカウントhttps://travis-ci.org/[ここ]を作成します。それは私達のすべてのプロジェクトをロードするでしょう、そして私達はそれでTravis CIをアクティブにするためにanyのスイッチを入れることができます。
SonarCloudで生成したトークンをTravis環境変数に追加する必要があります。これを行うには、CI用にアクティブ化したプロジェクトをクリックします。
次に、[その他のオプション]>[設定]をクリックし、[環境変数]までスクロールします。
リンク:/uploads/travis-ci-1-768×167.png%20768w[]
SONAR
TOKEN__という名前の新しいエントリを追加し、SonarCloudで生成されたトークンを値として使用します。 Travis CIはそれを暗号化して公開ビューから隠します。
リンク:/uploads/travis-ci-2-768×401.png%20768w[]
最後に、次の内容でプロジェクトのルートに
.travis.yml
ファイルを追加する必要があります。
language: java
sudo: false
install: true
addons:
sonarcloud:
organization: "your__organization__key"
token:
secure: "$SONAR__TOKEN"
jdk:
- oraclejdk8
script:
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar
cache:
directories:
- '$HOME/.m2/repository'
- '$HOME/.sonar/cache'
組織のキーを上記の組織のキーに置き換えることを忘れないでください。新しいコードをコミットしてGithubリポジトリにプッシュすると、Travis CIのビルドがトリガーされ、さらにソナースキャンも有効になります。
6. 結論
このチュートリアルでは、SonarQubeサーバーをローカルにセットアップする方法と、Quality Gateを使用してプロダクションリリースにプロジェクトの適合性の基準を定義する方法について説明しました。
SonarQube
documentation
には、プラットフォームの他の側面に関するより多くの情報があります。