CI システムにおける CodeQL コードスキャンのトラブルシューティング

CodeQLランナー で問題が生じている場合、ここに掲載されているヒントを使ってトラブルを解決できます。

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

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

init コマンドに時間がかかりすぎる

CodeQLランナー は、コードのビルドと解析を行う前に、CodeQL CLI と CodeQL ライブラリを含んでいる CodeQL バンドルへのアクセス権が必要です。

お使いのマシンで CodeQLランナー を初めて使用する際、init コマンドは CodeQL バンドルをマシンにダウンロードします。 ダウンロードには数分かかります。 CodeQL バンドルは次の実行の前にキャッシュされるので、CodeQLランナー を同じマシンで再度使用する際は、CodeQL バンドルを再ダウンロードすることはありません。

この自動ダウンロードを回避するには、CodeQL バンドルをマシンに手動でダウンロードし、init コマンドの --codeql-path フラグでパスを指定します。

ビルド中にコードが見つからない

CodeQLランナー の analyze コマンドで、No source code was seen during the build というエラーが出て失敗する場合、CodeQL がコードをモニターできなかったことを示しています。 このようなエラーが発生する理由として、次のようなものがあります。

  1. 自動言語検出により、サポートされている言語が特定されたが、リポジトリにその言語の分析可能なコードがない。 一般的な例としては、言語検出サービスが .h.gyp ファイルなどの特定のプログラミング言語に関連付けられたファイルを見つけたが、対応する実行可能コードがリポジトリに存在しない場合です。 この問題を解決するには、init コマンドの --languages フラグを使用して、解析する言語を手動で定義できます。 詳しい情報については、「code scanning を CI システムで設定する」を参照してください。

  2. コンパイル型言語を autobuild コマンドを使用せずに解析し、init ステップの後に自分でビルドステップを実行している。 ビルドが機能するには、CodeQLランナー がコードをモニターできるように環境をセットアップする必要があります。 init コマンドは、必要な環境をエクスポートする方法についての説明を生成するので、それをコピーしてinit コマンドの実行後にスクリプトを実行できます。

    • macOS および Linux:
      $ . codeql-runner/codeql-env.sh
    • Windows で、コマンドシェル (cmd) またはバッチファイル (.bat) を使用する場合:
      > call codeql-runner\codeql-env.bat
    • Windows で、PowerShell を使用する場合:
      > cat codeql-runner\codeql-env.sh | Invoke-Expression

    環境変数は、codeql-runner/codeql-env.json にも保存されています。 このファイルには、環境変数キーを値にマッピングする単一の JSON オブジェクトが含まれています。 init コマンドで生成されたスクリプトを実行できない場合、JSON フォーマットのデータを代わりに使用できます。

    注釈: init コマンドの--temp-dir フラグで一時ファイルのカスタムディレクトリを指定している場合、codeql-env ファイルへのパスが異なることがあります。

  3. macOS でコンパイル型言語を autobuild コマンドを使用せずに解析し、init ステップの後に自分でビルドステップを実行している。 SIP (システム整合性保護) が有効になっている場合、解析は失敗することがあります。OSX の最近のバージョンでは、SIP はデフォルトで有効になっています。 この問題を解決するには、ビルドコマンドの前に $CODEQL_RUNNER の環境変数を付けてください。 たとえばビルドコマンドが cmd arg1 arg2 の場合、$CODEQL_RUNNER cmd arg1 arg2 を実行します。

  4. コードがコンテナまたは別のマシンでビルドされている。 コンテナ化されたビルドを使用しているか、ビルドを別のマシンに委託している場合は、必ず CodeQLランナー をコンテナまたはビルドタスクを実行するマシンで実行してください。 詳しい情報については、「コンテナで CodeQL コードスキャンを実行する」を参照してください。

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

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

GitHubコミュニティで質問するサポートへの連絡