Qodana 2024.1 ヘルプ

クオリティゲート

高品質のゲートは、コードの品質を制御し、期待される品質を満たすソフトウェアを構築できるようにする手法です。品質ゲート条件が失敗すると、Qodana は終了コード 255 を使用して終了し、CI/CD ワークフローまたはパイプラインが失敗します。例: プロジェクトの品質ゲートが 10 個の問題に設定され、コードカバレッジが 40% に設定されている場合、Qodana が 11 個目の問題またはコードカバレッジが 40% のしきい値を下回っていることが検出されると、ビルドワークフローは失敗します。

品質ゲートしきい値、および失敗しきい値という用語は、同じ意味で使用されます。

以下の表で説明するように、プロジェクトの問題の総数に対して 1 つの品質ゲート、個別の問題の重大度ごとに複数の品質ゲート、およびコードカバレッジのしきい値を構成できます。

クオリティゲートタイプ

リンターのサポート

ライセンスに基づいて利用可能

総問題数

すべてのリンター

コミュニティ、Ultimate、Ultimate プラス

重大度固有の問題

.NET の Qodana コミュニティを除くすべてのリンター

リンターに応じた Community、Ultimate、Ultimate Plus ライセンス

コードカバレッジのしきい値

JVM 用 QodanaJS 用 QodanaPHP 用の Qodana.NET 用 QodanaPython 用 QodanaGo 用 Qodana

Ultimate と Ultimate Plus

使い方

Qodana は次のルールに従います。

  • プロジェクトの問題の総数が A である場合、プロジェクト内で A の問題が見つかると、実行は成功します。A+1 の問題が見つかると、実行は失敗します。

  • 重大度別の問題の数または B を考慮すると、特定の重大度の B 問題が見つかった場合、実行は成功します。B+1 の問題が見つかると、実行は失敗します。

  • コードカバレッジしきい値 C を指定すると、C% 行がカバーされると、実行は成功します。C-1% のみがカバーされている場合、実行は失敗します。

総問題数

すべての Qodana リンターのプロジェクトの問題の総数に対して品質ゲートを構成できます。

これは、すべてのリンターでサポートされる基本的な qodana.yaml 構成です。

failThreshold: <number>

あるいは、.NET の Qodana コミュニティを除くすべてのリンターは severityThresholds.any オプションをサポートします。

failureConditions:   severityThresholds:     any: <number-of-project-problems>
qodana scan \   -e QODANA_TOKEN="<cloud-project-token>" \   --fail-threshold <number>

このコマンドでは、--fail-threshold <number> オプションで品質ゲートを構成します。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

docker run \   -v <source-directory>/:/data/project/ \   -e QODANA_TOKEN="<cloud-project-token>" \   jetbrains/qodana-<linter> \   --fail-threshold <number>

このコマンドでは、<source-directory> はプロジェクトソースコードへの完全なローカルパスであり、--fail-threshold <number> オプションは品質ゲートを構成します。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

クオリティゲートが失敗した場合にプルリクエストのマージをブロックするように GitHub を構成できます。これを行うには、以下で説明するようにブランチ保護ルール(英語)を作成します。

  1. Qodana スキャン(英語)アクションを呼び出す新しい GitHub アクションワークフローを作成するか、既存のワークフローを開きます。

  2. main ブランチを対象とする pull_request イベントで実行されるようにワークフローを設定します。

    name: Qodana on:   pull_request:     branches:       - main jobs:   qodana:     runs-on: ubuntu-latest     permissions:       contents: write       pull-requests: write       checks: write     steps:       - uses: actions/checkout@v3         with:           ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit           fetch-depth: 0 # a full history is required for pull request analysis       - name: 'Qodana Scan'         uses: JetBrains/qodana-action@v2024.1         env:           QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

    main の代わりに、ここで希望のブランチを指定できます。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

  3. Qodana アクション fail-threshold オプションの失敗しきい値 (数値) を設定します。

  4. リポジトリ名にある設定をクリックします。

  5. 左側のメニューでブランチをクリックします。

  6. ブランチ保護ルールセクションで、ルールの追加をクリックします。

  7. mainブランチ名前パターンに追加します。

  8. マージ前にステータスチェックに合格する必要があるを選択します。

  9. Qodana ステータスチェックを検索して確認してください。

  10. 作成をクリックします。

Jenkins パイプラインでクオリティゲートを設定するには、steps ブロックに --fail-threshold <number> オプションを追加します。

pipeline {    environment {       QODANA_TOKEN=credentials('qodana-token')    }    agent {       docker {          args '''             -v <path-to-project>:/data/project             --entrypoint=""          '''          image 'jetbrains/qodana-<linter>'       }    }    stages {       stage('Qodana') {          steps {             sh '''                qodana \                --fail-threshold <number>             '''          }       }    } }

このスニペットの QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要な qodana-token 資格情報に含まれるプロジェクトトークンを参照します。

GitLab CI/CD パイプラインで品質ゲートを実行するには、この構成を .gitlab-ci.yml ファイルに保存します。

qodana:  image:    name: jetbrains/qodana-<linter>    entrypoint: [''] variables:    QODANA_TOKEN: $qodana_token script:    - qodana --fail-threshold <number> artifacts:   paths:     - qodana

このサンプルでは、script セクションで --fail-threshold <number> オプションを指定します。このスニペットの QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

重大度固有の問題

.NET の Qodana コミュニティを除くすべてのリンターでは、問題の重大度ごとに個別の品質ゲートを構成できます。設定制限を 1 つだけ超えると、問題の総数も含めてビルドが失敗します。

qodana.yaml 重大度の構成は次のとおりです。

failureConditions:   severityThresholds:     any: <number> # Total problems     critical: <number> # Critical and other severities     high: <number>     moderate: <number>     low: <number>     info: <number>

コードカバレッジのしきい値

JVM 用 QodanaJS 用 QodanaPHP 用の Qodana.NET 用 QodanaPython 用 QodanaGo 用 Qodana リンターの合計コードカバレッジしきい値とフレッシュコードカバレッジしきい値を構成できます。

qodana.yaml 構成サンプルは次のとおりです。

failureConditions:   testCoverageThresholds:     fresh: <number> # Fresh code coverage     total: <number> # Total code coverage

関連ページ:

よくある質問

ここでは、Qodana の基本概念をより深く理解するのに役立つ質問への回答をまとめています。一般的な質問:Qodana を実行するにはどうすればよいですか ? ニーズに応じて、次を使用して Qodana を実行できます。CI パイプライン、JetBrains IDE、Qodana CLI ツール、または利用可能な Docker イメージ、ネイティブモードは .NET 用 Qodana リンターで利用可能、Qodana を <CI/CD 名> パイプラインに構築するにはどうすればよいですか ?...

コードカバレッジ

コードカバレッジは、生成されたレポートを使用して、メソッド、クラス、ファイル内の全体的なコードカバレッジを計算します。また、これらのエンティティにおけるカバレッジの不足に関連する問題についても報告します。この機能は、次のリンターの Ultimate および Ultimate Plus ライセンスで利用できます。JVM 用 QodanaIntelliJ IDEA コードカバレッジエージェントが推奨ツールですが推奨される形式です。もサポートされています。JaCoCoJS 用 QodanaJestPHP...

ベースライン

ベースラインは、特定の Qodana 実行時に取得され、ファイルに含まれているコードベースの問題のスナップショットです。ベースライン機能を使用すると、現在のコードとベースラインの状態を比較し、新しい問題、変更されていない問題、解決された問題を確認できます。この機能は、Community、Ultimate、Ultimate Plus ライセンスとその試用版で利用可能なすべてのリンターでサポートされています。使い方:ベースラインなしで Qodana を実行すると、現在の実行時に検出された問題を確認...

GitLab CI/CD

GitLab CI/CD は、さまざまな CI/CD 手法を使用するソフトウェア開発用のツールです。このセクションでは、GitLab CI/CD パイプライン内で QodanaDocker イメージを実行する方法について説明し、次のケースについて説明します。特定のブランチおよびマージリクエストのインスペクション、インスペクションレポートを Qodana クラウドに転送する、GitLab CI/CD ユーザーインターフェースでの Qodana レポートの公開、品質ゲートとベースライン機能の使用、コード品...

PHP バージョンの移行

ある PHP バージョンから別のバージョンへの移行がコードの品質にどのような影響を与えるかを確認するには、Qodana シナリオを使用します。このシナリオを実行すると、新しい PHP バージョンにアップグレードした後に発生するコードベースの問題を確認できます。この機能は PHP 用の Qodana リンターによってサポートされており、Ultimate および Ultimate Plus ライセンスとその試用版で利用できます。このシナリオは、ファイルで構成することも、CLI を使用して呼び出すこともでき...