JenkinsがsonarQubeを統合してコード品質検査を実現

1. sonarQubeの紹介

SonarQubeは、コード内のエラー、脆弱性、コードの悪臭を検出するために使用される自動コードレビューツールです。既存のワークフローと統合して、プロジェクトのブランチやプルリクエスト全体で継続的なコード検査をサポートできます。

ワークフローは次のとおりです。

図に示すように、SonarQubeは次の4つのコンポーネントで構成されています。

1.SonarQubeサーバー:

  • WebServer:開発者とマネージャーが高品質のスナップショットを閲覧し、SonarQubeインスタンスを構成する
  • 検索サーバー:UI(履歴)からの逆検索のためのElasticsearchに基づく検索サーバー
  • computeEngine:コード分析レポートの処理と、SonarQubeデータベースへの保存を担当

2.SonarQubeデータベース:

  • SonarQubeインスタンス構成(セキュリティ、プラグイン設定など)
  • プロジェクト、ビューなどの高品質のスナップショット

** 3. SonarQubeプラグイン:**言語、SCM、統合、認証、および管理プラグインを含む複数のSonarQubeプラグインがサーバーにインストールされています

** 4. SonarScanners:**さまざまなソナースキャンコンポーネント。ビルド/継続的インテグレーションサーバーで実行され、プロジェクトを分析します。

ソナーの詳細については、公式サイトをご覧ください


2. SonarQubeのインストール

SonarQubeにはさまざまなインストール方法が用意されています。この記事では、Dockerイメージのインストール方法を使用して説明します。

1. sonarQubeのDockerコンテナーをプルする

$> docker pull sonarqube:8.2-community

2. Dockerデータボリュームを作成する

#包含数据文件,例如嵌入式H2数据库和Elasticsearch索引
$> docker volume create --name sonarqube_data
#包含插件,例如语言分析器
$> docker volume create --name sonarqube_extensions
#包含有关访问,Web流程,CE流程和Elasticsearch的SonarQube日志
$> docker volume create --name sonarqube_logs

3.ローカルデータベースを構成します(この例ではpostgresqlを使用しています)

postgresqlのデフォルトスキーマ「public」を使用する場合、この手順は必要ありません。スキーマをカスタマイズする場合は、次のコマンドを実行します

ALTER USER mySonarUser SET search_path to <自定义的schema名称>

4. sonarQubeを起動します

$> docker run -d --name sonarqube \
    -p 9000:9000 \
    #以下为给sonarQube的数据库配置,推荐postgresql
    -e SONAR_JDBC_URL=jdbc:postgresql://xxxx:5432/postgres \
    -e SONAR_JDBC_USERNAME=... \
    -e SONAR_JDBC_PASSWORD=... \
    -v sonarqube_data:/opt/sonarqube/data \
    -v sonarqube_extensions:/opt/sonarqube/extensions \
    -v sonarqube_logs:/opt/sonarqube/logs \
    <image_name>

ローカルブラウザーには、localhost:9000にアクセスしてアクセスできます。


3. sonarQubeでプロジェクトを作成する

ステップ1:新しいプロジェクト

Enterprise WeChatスクリーンショット_3a0966e9-ebb8-4878-8d1c-985bd65c0009

ステップ2:プロジェクト情報を入力する

image-20200409183243933

ステップ3:トークンを作成する

image-20200409183631966

ステップ4:トークンを記録する

image-20200409183801845

プロジェクトの作成が完了し、トークンが記録され、次の手順が使用されます。


4. Jenkins設定sonarQubeプラグイン

1. sonarQubeプラグインをインストールします

image-20200409181901457

2. sonarQube構成を追加する

以下に示すように、jenkins> Manage Jenkins>グローバル構成でソナー情報を構成します。

image-20200409184010520

nameはカスタム名、serverURLはsonarqubeのアクセスアドレスです

最後のトークンを追加する必要があります。以下に示すように、[追加]をクリックします。

image-20200409184332842

タイプとして「秘密のテキスト」を選択し、3番目のステップで取得したトークンを秘密の列に入力し、残りの列をカスタマイズします。追加後、前のステップのサーバー認証トークンに戻り、追加したトークンを選択します。


5.プロジェクトにsonarQubeを導入する

以下は、Mavenシングルモジュールプロジェクトの例です。

1. sonarqubeプラグインを導入します。

<!--添加参数,指定projectKey,即在sonar中创建项目时的名称-->
<properties>
	<sonar.projectKey>sonar-demo</sonar.projectKey>
</properties>
<!--添加sonarqube插件-->
<plugin>
  <groupId>org.sonarsource.scanner.maven</groupId>
  <artifactId>sonar-maven-plugin</artifactId>
  <version>3.6.0.1398</version>
</plugin>

2.手動コードスキャン

次のコマンドを実行します

mvn sonar:sonar \
  -Dsonar.projectKey=sonar的项目名称 \
  -Dsonar.host.url=http://sonar的地址 \
  -Dsonar.login=第三步记录的令牌

実行が完了したら、sonarQubeインターフェースに戻ると、スキャンレコードと結果を確認できます。

image-20200409184114645

6. jenkinsパイプラインへのsonarqubeの統合

以下に示すように、jenkinsfileでコードの静的検査のステージを定義します。

image-20200409234426724

上の図は、2つの段階を定義しています。1。静的コード検査2.検査結果の分析

⚠️**:検査結果の分析段階では、Jenkinsはsonarqubeのコールバックを通じてスキャン結果を認識しています。sonarqubeでWebhookを構成する必要があります。

image-20200409184522988

webhookドメイン名は、jenkinsアドレスのドメイン名です。

これまでのところ、以下に示すように、sonarqubeはjenkinsパイプライン(パイプライン)に正常に統合されています。

image-20200409184044044

7.sonarQubeカスタム品質バルブ

1.カスタム品質のバルブを作成する

image-20200409184142238

2.品質バルブを構成する

image-20200409184212688

3.テスト

たとえば、しきい値が高すぎる場合、スキャン結果はしきい値要件を満たしていないため、スキャン結果は失敗します。

この例では、現在のプロジェクトでは到達できない値に条件をランダムに調整します

image-20200410103807909

現時点では、パイプラインが実行されていると、標準を満たしていないため、コード品質チェックは失敗します。

image-20200410104030284

⚠️:したがって、自分のプロジェクトのしきい値をカスタマイズする場合、それはさまざまなプロジェクトの状況に依存します。


8.まとめ

この記事では、JenkinsマルチブランチパイプラインへのsonarQubeの統合を紹介し、継続的な統合におけるコード品質チェックを実現します。記事に含まれるいくつかの側面(jenkinsfile、sonarQubeの詳細な使用など)は詳細に説明されていませんが、すぐに渡されます。sonarQubeは、業界でよく知られているコード検査ツールであり、ci / cdのツールエコシステムのメンバーです。詳細に検討すると、より便利で興味深い機能が見つかります。コード品質検査は組み込みのコード品質の一部です。パイプラインにコード品質検査を統合すると、コード内の問題と欠陥を迅速に発見できるため、問題を適時に修復し、技術的負債の蓄積を防ぐことができます(ここでも問題を解決するのが最善です)。問題が発生した場合)、それ以外の場合は、問題がある程度まで蓄積すると、修理コストがますます高くなります。


著者の公開番号に注意を払い、さまざまな元の/品質の技術記事をプッシュしてください⬇️Java
image-20200410104030284
エンジニアだけでなく、Javaエンジニアも、開発、自動テスト、CI / CD、アジャイル開発などをカバーします。自動テスト、ci / cd、パブリックアカウント、WeChat(cg8377)、電子メール([email protected])などの技術的要件に対するソリューションを提供します。また、技術的な交換を歓迎します。

公開された26元の記事 ウォンの賞賛1 ビュー9777

おすすめ

転載: blog.csdn.net/qq_31884013/article/details/105430697