このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-09-23. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

CI システムで CodeQL コードスキャンを実行する

CodeQLランナー を使用して、、サードパーティの継続的インテグレーションシステムで CodeQL code scanning を実行できます。

Code scanningは、GitHub Advanced Securityのライセンスを持っているなら利用できます。

Note: The CodeQLランナー is being deprecated. Please use the CodeQL CLI version 2.6.2 or greater instead. GitHub Enterprise Server 3.3 will be the final release series that supports the CodeQLランナー. On GitHub Enterprise Cloud, the CodeQLランナー will be supported until March 2022. For more information, see the CodeQL runner deprecation.

ノート: Code scanningはGitHub Enterprise Server 2.22ではベータです。 Code Scanningの一般に利用なリリースについては、GitHub Enterprise Serverの最新リリースにアップグレードしてください。

ノート: この機能を使用するには、サイト管理者がGitHub Enterprise Serverのインスタンスのcode scanningを有効にする必要があります。 詳しい情報については「アプライアンスのためのcode scanningの設定」を参照してください。

既存の CI システムで CodeQL code scanning を使用する

GitHub Actions 以外の継続的インテグレーションまたは継続的デリバリ/デプロイメント (CI/CD) システムを使用している場合、GitHub の CodeQL 解析を実行して、その結果を GitHub にアップロードできます。 これを実行するには、CodeQLランナー を使用します。

CodeQLランナー について

Code scanning は、開発者が GitHub リポジトリ内のコードを分析して、セキュリティの脆弱性とコーディングエラーを見つけることができる機能です。 分析によって特定されたすべての問題はGitHub Enterprise Serverに表示されます。詳細については、「code scanning について」を参照してください。

CodeQLランナー を使用して、サードパーティ継続的インテグレーション (CI) システムで処理しているコード上で code scanning を実行できます。 また、GitHub Actions を使用して、GitHub Enterprise Server 上で code scanning を実行することもできます。 詳細については、「リポジトリに対する code scanning をセットアップする」を参照してください。

CodeQLランナー は、GitHub リポジトリのチェックアウト中に CodeQL 解析を実行するコマンドラインツールです。 サードパーティーのシステムにランナーを追加し、ランナーを呼び出してコードを解析し、その結果を GitHub Enterprise Server にアップロードします。 この結果は、リポジトリの code scanning アラートとして表示されます。

ノート:

  • CodeQLランナーはAdvanced Securityライセンスを持つお客様にご利用いただけます。
  • CodeQLランナーはCodeQL CLIと混同しないでください。 CodeQL CLIは、セキュリティの研究のためにCodeQLデータベースを作成し、CodeQLクエリを実行できるようにしてくれるインタラクティブなコマンドラインインターフェースです。 詳しい情報については「CodeQL CLI」を参照してください。

CodeQLランナー をダウンロードする

CodeQLランナー は、https://github.com/github/codeql-action/releases からダウンロードできます。 一部のオペレーティングシステムでは、ダウンロードしたファイルの実行前に、その権限を変更する必要があります。

Linuxの場合:

chmod +x codeql-runner-linux

macOS:

chmod +x codeql-runner-macos
sudo xattr -d com.apple.quarantine codeql-runner-macos

Windowsでは、通常codeql-runner-win.exeファイルの権限変更は必要ありません。

CodeQLランナー を CI システムに追加する

CodeQLランナーをダウンロードし、実行できることを確認したら、code scanningに使用するそれぞれのCIサーバーでランナーを利用できるようにしなければなりません。 たとえば、内部的な中央の場所からランナーをコピーするよう、各サーバーを設定することになるでしょう。 あるいは、REST API を使用して GitHubから直接ランナーを取得することもできます。例:

wget https://github.com/github/codeql-action/releases/latest/download/codeql-runner-linux
chmod +x codeql-runner-linux

これに加えて、各 CI サーバーは以下の条件も満たす必要があります。

  • CodeQLランナー が使用するための GitHub App または個人アクセストークン。 repo スコープのあるアクセストークン、または security_events の書き込み権限、ならびに metadata および contents の読み取り権限を持つ GitHub App を使用する必要があります。 詳細は「GitHub Apps をビルドする」および「個人アクセストークンを作成する」を参照してください。
  • CodeQLランナー のリリースに伴う CodeQL バンドルへのアクセス。 このパッケージには、CodeQL 解析に必要なクエリとライブラリ、さらにランナーによって内部的に使用される CodeQL CLI が含まれています。 詳細は「CodeQL CLI」を参照してください。

CodeQL バンドルにアクセスを与えるオプションは次の通りです。

  1. CI サーバーに https://github.com/github/codeql-action へのアクセスを許可し、CodeQLランナー がバンドルを自動的にダウンロードできるようにする。
  2. GitHub Enterprise Server に github/codeql-action リポジトリをミラーする。 --codeql-path フラグを指定してない限り、ランナーは GitHub.com のこの場所にバンドルがあるかどうか自動的に確認します。
  3. バンドルを手動でダウンロード/展開し、他の中央リソースに保存して、 --codeql-path フラグで、呼び出しにおいて CodeQLランナー を初期化するバンドルの場所を指定します。

CodeQLランナー を呼び出す

解析するリポジトリのチェックアウトの場所から、CodeQLランナー を呼び出す必要があります。 主なコマンドは次の 2 つです。

  1. init は、ランナーを初期化し、解析する各言語に CodeQL データベースを作成するために必要です。 このデータベースは、続くコマンドにより展開、解析されます。
  2. analyze は、CodeQL データベースを展開、解析し、結果を GitHub Enterprise Server にアップロードするために必要です。

どちらのコマンドにおいても、GitHub Enterprise Server の URL、リポジトリの OWNER/NAME、および認証に使用するGitHub Appsまたは個人アクセストークンを指定する必要があります。 CIサーバーがgithub/codeql-actionリポジトリからCodeQLバンドルを直接ダウンロードできないなら、CodeQLバンドルの場所を指定する必要もあります。

将来の解析のため CodeQLランナー が CodeQL バンドルを保存する場所を --tools-dir フラグで設定できます。また、解析中に一時ファイルを保存する場所を、--temp-dir で設定できます。 --temp-dir.

ランナーのコマンドラインリファレンスを表示するには、-h フラグを使用します。 たとえば、動作するすべてのコマンドを一覧表示するには codeql-runner-OS -h と入力し、init コマンド実行時に使用できるすべてのコマンドを一覧表示するには codeql-runner-OS init -h と入力します (OS 変数は使用している実行ファイルによります)。 詳しい情報については、「code scanning を CI システムで設定する」を参照してください。

ノート:

  • SARIF upload supports a maximum of 1000 results per upload. この制限を超えた結果は無視されます。 ツールがあまりに多くの結果を生成する場合、最も重要なルールやクエリに対する結果に焦点を当てるよう、設定を更新すべきです。

  • For each upload, SARIF upload supports a maximum size of 10 MB for the gzip-compressed SARIF file. Any uploads over this limit will be rejected. If your SARIF file is too large because it contains too many results, you should update the configuration to focus on results for the most important rules or queries.

基本的な例

この例では、https://github.example.com にホストされている octo-org/example-repo リポジトリに対し、Linux CI サーバーで CodeQL 解析を実行します。 このリポジトリには、CodeQL により直接解析でき、ビルドされていない言語 (Go、JavaScript、Python、TypeScript) のみが含まれているため、プロセスは非常に単純です。

この例では、サーバーはgithub/codeql-actionリポジトリから直接CodeQLバンドルをダウンロードできるので、--codeql-pathフラグを使う必要はありません。

  1. 解析するリポジトリをチェックアウトします。

  2. リポジトリがチェックアウトされるディレクトリに移動します。

  3. CodeQLランナー を初期化し、検出された言語用の CodeQL データベースを作成します。

    $ /path/to-runner/codeql-runner-linux init --repository octo-org/example-repo
        --github-url https://github.example.com --github-auth TOKEN
    > Cleaning temp directory /srv/checkout/example-repo/codeql-runner
    > ...
    > Created CodeQL database at /srv/checkout/example-repo/codeql-runner/codeql_databases/javascript.
  4. CodeQLデータベースを展開し、分析し、その結果をGitHub Enterprise Serverにアップロードしてください。 その結果は、リポジトリのSecurity(セキュリティ)タブに表示されます。

    $ /path/to-runner/codeql-runner-linux analyze --repository octo-org/example-repo
        --github-url https://github.example.com --github-auth TOKEN
        --commit 5b6a3078b31dc346e5ce7b86837d6abbe7a18bbd --ref refs/heads/my-branch
    > Finalizing database creation
    > ...
    > POST /repos/octo-org/example-repo/code-scanning/sarifs - 202 in 786ms
    > Successfully uploaded results
  5. code scanningの結果をPull Requestのチェックとしてアップロードするには、 --ref フラグを使ってPull Requestを指定してください。 CodeQLランナーは、pull_request webhookイベントで実行されるようにセットアップすることをおすすめします。

    $ /path/to-runner/codeql-runner-linux analyze --repository octo-org/example-repo
        --github-url https://github.example.com --github-auth TOKEN
        --commit 1dc7a1346e5ce7b86835b68bbda3078b37d6abbe --ref refs/pull/123/merge
    > Finalizing database creation
    > ...
    > POST /repos/octo-org/example-repo/code-scanning/sarifs - 202 in 786ms
    > Successfully uploaded results

code scanningアラートの表示に関する詳しい情報については「Code ScanningのアラートのPull Requestでのトリアージ」及び「リポジトリのCode Scanningアラートの管理」を参照してください。

コンパイル型言語の例

この例は前の例と似ていますが、今回のリポジトリには C/C++、C#、または Java のコードがあります。 これらの言語用に CodeQL データベースを作成するには、CLI でビルドをモニターする必要があります。 初期化プロセスの最後に、ランナーはコードをビルドする前に環境をセットアップするために必要なコマンドを報告します。 通常の CI ビルドプロセスを呼び出す前にこのコマンドを実行してから、analyze コマンドを実行する必要があります。

  1. 解析するリポジトリをチェックアウトします。

  2. リポジトリがチェックアウトされるディレクトリに移動します。

  3. CodeQLランナー を初期化し、検出された言語用の CodeQL データベースを作成します。

    $ /path/to-runner/codeql-runner-linux init --repository octo-org/example-repo-2
        --github-url https://github.example.com --github-auth TOKEN
    > Cleaning temp directory /srv/checkout/example-repo-2/codeql-runner
    > ...
    > CodeQL environment output to "/srv/checkout/example-repo-2/codeql-runner/codeql-env.json"
      and "/srv/checkout/example-repo-2/codeql-runner/codeql-env.sh".
      Please export these variables to future processes so that CodeQL can monitor the build, for example by running 
      ". /srv/checkout/example-repo-2/codeql-runner/codeql-env.sh".
  4. init アクションによって生成されたスクリプトを入手し、ビルドを監視する環境をセットアップします。 次のコードには、先頭にドットとスペースがあることに注意してください。

    $ . /srv/checkout/example-repo-2/codeql-runner/codeql-env.sh
  5. コードをビルドします。 macOS では、build コマンドのプレフィックスに環境変数 $CODEQL_RUNNER を付ける必要があります。 詳しい情報については、「CI システムにおせるコードスキャンのトラブルシューティング」を参照してください。

  6. CodeQLデータベースを展開し、分析し、その結果をGitHub Enterprise Serverにアップロードしてください。 その結果は、リポジトリのSecurity(セキュリティ)タブに表示されます。

    $ /path/to-runner/codeql-runner-linux analyze --repository octo-org/example-repo
        --github-url https://github.example.com --github-auth TOKEN
        --commit 5b6a3078b31dc346e5ce7b86837d6abbe7a18bbd --ref refs/heads/my-branch
    > Finalizing database creation
    > ...
    > POST /repos/octo-org/example-repo/code-scanning/sarifs - 202 in 786ms
    > Successfully uploaded results
  7. code scanningの結果をPull Requestのチェックとしてアップロードするには、 --ref フラグを使ってPull Requestを指定してください。 CodeQLランナーは、pull_request webhookイベントで実行されるようにセットアップすることをおすすめします。

    $ /path/to-runner/codeql-runner-linux analyze --repository octo-org/example-repo
        --github-url https://github.example.com --github-auth TOKEN
        --commit 1dc7a1346e5ce7b86835b68bbda3078b37d6abbe --ref refs/pull/123/merge
    > Finalizing database creation
    > ...
    > POST /repos/octo-org/example-repo/code-scanning/sarifs - 202 in 786ms
    > Successfully uploaded results

code scanningアラートの表示に関する詳しい情報については「Code ScanningのアラートのPull Requestでのトリアージ」及び「リポジトリのCode Scanningアラートの管理」を参照してください。

注釈: コンテナ化されたビルドを使用している場合、ビルドタスクを行うコンテナで CodeQLランナー を実行する必要があります。

参考リンク

問題がまだ解決していませんか?