Skip to main content

既存の CI システムでコード スキャンを使用する

CodeQL CLI またはサード パーティの継続的インテグレーション システムの別のツールを使用してコードを分析し、結果を GitHub にアップロードできます。 結果の code scanning アラートは、GitHub 内で生成されたアラートとともに表示されます。

この機能を使用できるユーザーについて

書き込み アクセスを持つユーザー

Code scanning は、次のリポジトリに使用できます:

  • GitHub.com 上のパブリックリポジトリ
  • GitHub Advanced Security が有効になっている GitHub Enterprise Cloud の組織所有リポジトリ

既存の CI システムでの code scanning の使用について

GitHub Actions を使用して GitHub 内で code scanning を実行する代わりに、外部の継続的インテグレーションまたは継続的デリバリー/デプロイ (CI/CD) システムでコードを分析し、結果を GitHub にアップロードできます。

CodeQL CLI をサードパーティ システムに追加することも、Static Analysis Results Interchange Format (SARIF) 2.1.0 データとして結果を生成できる別のサードパーティ静的解析ツールを使用することもできます。 サポートされている SARIF 形式の詳細については、「Code scanningの SARIF サポート」を参照してください。

CodeQL CLI は、コードの分析に使うことができるスタンドアロンのコマンドライン ツールです。 詳しくは、「CodeQL CLI について」を参照してください。

外部で生成した code scanning のアラートは、GitHub で生成した code scanning のアラートと同じ方法で表示されます。 複数の構成を使用してコード スキャンを実行すると、アラートに複数の分析元が含まれることがあります。 アラートに複数の分析元がある場合、各分析元でのアラートの状態を、[アラート] ページに表示することができます。 詳しくは、「Code scanningアラートについて」を参照してください。

注: GitHub の結果の code scanning として表示する SARIF データをアップロードすることは、GitHub Advanced Security が有効にされた組織が所有するリポジトリ、および GitHub.com 上のパブリック リポジトリでサポートされます。 詳しくは、「リポジトリのセキュリティと分析設定を管理する」を参照してください。

分析ツールの設定

まず、選択した分析ツールをダウンロードし、CI システムで設定する必要があります。

CodeQL CLI を使用している場合は、CodeQL code scanning 分析を実行するすべての CI サーバーで、CodeQL CLI バンドルの完全なコンテンツを利用できるようにする必要があります。 詳しくは、「CodeQL CLI の設定」を参照してください。

分析ツールを CI システム内のサーバーで使用できるようにすると、データを生成する準備が整います。

コード分析

CodeQL CLI または別の分析ツールを使用してコードを分析するには、コードベース環境を分析して設定するコードをチェックし、依存関係が使用可能であることを確認します。 コードベースのビルド コマンドを見つけることもできます。通常は CI システムの構成ファイルで使用できます。

その後、コードベースを分析して結果を生成する手順を完了できます。これは、使用している静的分析ツールによって異なります。

CodeQL CLI を使用している場合は、まずコードから CodeQL データベースを作成し、次にデータベースを分析して SARIF 結果を生成する必要があります。 詳細については、「CodeQL 分析のためのコードの準備」および「CodeQL クエリによるコード分析」を参照してください。

GitHubでの認証のためのトークンの生成

各 CI サーバーには、CodeQL CLI、REST API、または別のメソッドを使用しているかどうかに関係なく、結果を GitHub にアップロードするために使用する GitHub App または personal access token が必要です。 アクセス トークン、またはsecurity_events 書き込みアクセス許可がある GitHub App を使用する必要があります。 CIサーバーがこのスコープのトークンをすでに使用して GitHub からリポジトリをチェックアウトしている場合は、同じトークンを使用できる可能性があります。 それ以外の場合は、security_events 書き込みアクセス許可を持つ新しいトークンを作成し、これを CI システムのシークレット ストアに追加します。 詳細については、「GitHub App の作成について」と「個人用アクセス トークンを管理する」を参照してください。

結果を GitHub にアップロードするさまざまな方法の詳細については、「SARIF ファイルを GitHub にアップロードする」を参照してください。

GitHubへの結果のアップロード

コードを分析し、SARIF 結果を生成し、GitHub で認証できることを確認したら、結果を GitHub にアップロードできます。 結果のアップロードに使用できるさまざまな方法の詳細については、「SARIF ファイルを GitHub にアップロードする」を参照してください。

CodeQL CLI を使用して結果を GitHub にアップロードする方法の詳細については、「CodeQL 分析結果を GitHub にアップロードする」を参照してください。

デフォルトでは、code scanningはリポジトリの分析ごとに1つのSARIF結果ファイルを期待します。 したがって、コミットから2つめのSARIF結果ファイルをアップロードすると、それはデータのオリジナルのセットの置き換えとして扱われます。 たとえば、分析ツールが分析する言語ごと、または使用するルールのセットごとに異なる SARIF ファイルを生成する場合、1 つの分析に対して 2 つの異なる SARIF ファイルをアップロードすることができます。 リポジトリ内のコミットに対して複数の結果セットをアップロードする場合は、各結果セットを一意のセットとして識別する必要があります。 SARIF アップロードのカテゴリの指定方法は、分析方法によって異なります。 詳しくは、「Code scanningの SARIF サポート」を参照してください。