Note: This article describes the features available with the version of the CodeQL action and associated CodeQL CLI bundle included in the initial release of this version of GitHub Enterprise Server. If your enterprise uses a more recent version of the CodeQL action, see the GitHub Enterprise Cloud article for information on the latest features. For information on using the latest version, see "Configuring code scanning for your appliance."
デバッグ用の詳細なログを生成する
詳細なログ出力を生成するため、ステップのデバッグロギングを有効化することができます。 詳しい情� �については、「デバッグログの有効化」を参照してく� さい。
コンパイル言語の自動ビルドの失敗
プロジェクト内のコンパイル言語のコードの自動ビルドが失敗した� �合は、次のトラブルシューティングのステップを試してく� さい。
-
code scanning ワークフローから
autobuild
ステップを削除し、特定のビルドステップを追� します。 ワークフローの編集に関する詳しい情� �は、「code scanning を設定する」を参照してく� さい。autobuild
ステップの置き換えに関する詳細は、「コンパイル型言語の CodeQL ワークフローを設定する」を参照してく� さい。 -
ワークフローが解析する言語を明示的に指定していない� �合、CodeQL はコードベースでサポートされている言語を暗黙的に検出します。 この設定では、コンパイル型言語である C/C++、C#、Java のうち、CodeQL はソースファイルの数が最も多い言語のみを解析します。 ワークフローを編集し、解析する言語を指定したビルドマトリクスを追� してく� さい。 デフォルトの CodeQL 解析では、こうしたマトリクスを使用しています。
以下はワークフローからの抜粋で、まず言語を指定するジョブ戦略におけるマトリクスの使用法を示し、次に「Initialize CodeQL」のステップで各言語を参照しています。
jobs: analyze: ... strategy: fail-fast: false matrix: language: ['csharp', 'cpp', 'javascript'] steps: ... - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: ${{ matrix.language }}
ワークフローの編集に関する詳しい情� �については、「コードスキャンを設定する」を参照してく� さい。
ビルド中にコードが見つからない
ワークフローでエラー No source code was seen during the build
または The process '/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' failed with exit code 32
が発生した� �合、CodeQL がコードを監視できなかったことを示しています。 このようなエラーが発生する理由として、次のようなものがあります。
-
自動言語検出により、サポートされている言語が特定されたが、リポジトリにその言語の分析可能なコードがない。 一般的な例としては、言語検出サービスが
.h
や.gyp
ファイルなどの特定のプログラミング言語に関連付けられたファイルを見つけたが、対応する実行可能コードがリポジトリに存在しない� �合です。 この問題を解決するには、language
マトリクスにある言語のリストを更新し、解析する言語を手動で定義します。 たとえば、次の設定では Go と JavaScript のみを分析します。strategy: fail-fast: false matrix: # Override automatic language detection by changing the list below. # Supported options are listed in a comment in the default workflow. language: ['go', 'javascript']
詳しい情� �については、上記「コンパイル言語の自動ビルドの失敗」にあるワークフローの抜粋を参照してく� さい。
-
code scanning ワークフローはコンパイルされた言語(C、C++、C#、または Java)を分析しているが、コードはコンパイルされていない。 デフォルトでは、CodeQL 分析ワークフローには
autobuild
ステップが含まれていますが、このステップはベスト エフォートプロセスを表しており、特定のビルド環境によっては、コードのビルドに失敗する可能性があります。autobuild
ステップを削除し、ビルドステップを手動で含めない� �合も、コンパイルが失敗する可能性があります。 ビルドステップの指定に関する詳細は、「コンパイル型言語の CodeQL ワークフローを設定する」を参照してく� さい。 -
ワークフローはコンパイルされた言語(C、C++、C#、または Java)を分析しているが、パフォーマンスを向上させるためにビルドの一部がキャッシュされている(Gradle や Bazel などのビルドシステ� で発生する可能性が最も高い)。 CodeQL はコンパイラのアクティビティを監視してリポジトリ内のデータフローを理解するため、CodeQL は分析を実行するために完全なビルドを実行する必要があります。
-
ワークフローはコンパイルされた言語(C、C++、C#、または Java)を分析しているが、ワークフローの
init
ステップとanalyze
ステップの間でコンパイルが行われていない。 CodeQL では、コンパイラのアクティビティを監視して分析を実行するために、これらの 2 つのステップ間でビルドを行う必要があります。 -
コンパイルされたコード(C、C++、C#、または Java)は正常にコンパイルされたが、CodeQL がコンパイラの呼び出しを検出できない。 一般的な原� は次のようなものです。
- ビルドプロセスを CodeQL とは別のコンテナで実行している。 詳しい情� �については、「コンテナで CodeQL コードスキャンを実行する」を参照してく� さい。
- デーモンプロセスを使用して、GitHub Actions の外部で分散ビルドシステ� によりビルドしている。
- CodeQL は、使用されているコンパイラを認識していない。
For .NET Framework projects, and for C# projects using either
dotnet build
ormsbuild
, you should specify/p:UseSharedCompilation=false
in your workflow'srun
step, when you build your code.たとえば、次の C# に対する設定では、最初のビルドステップ中にフラグが渡されます。
- run: | dotnet build /p:UseSharedCompilation=false
特定のコンパイラまたは設定で別の問題が発生した� �合は、your site administrator までお問い合わせく� さい。
ビルドステップの指定に関する詳細は、「コンパイル型言語の CodeQL ワークフローを設定する」を参照してく� さい。
リポジトリの一部が autobuild
を使用して分析されない
CodeQL の autobuild
機能は、ヒューリスティックスを使用してリポジトリにコードをビルドしますが、このアプローチでは、リポジトリの分析が不完全になることがあります。 たとえば、単一のリポジトリに複数の build.sh
コマンドが存在する� �合、autobuild
ステップはコマンドの 1 つしか実行しないため、分析が完了しない� �合があります。 これを解決するには、autobuild
ステップを、分析するすべてのソースコードをビルドするビルドステップに置き換えます。 詳しい情� �については、「コンパイル型言語の CodeQL ワークフローを設定する」を参照してく� さい。
ビルドに時間がかかりすぎる
CodeQL 分析でのビルドの実行に時間がかかりすぎる� �合は、ビルド時間を短縮するための方法がいくつかあります。
メモリまたはコアを増やす
セルフホストランナーを使用して CodeQL 解析を実行している� �合、ランナーのメモリやコア数を増やすことができます。
マトリックスビルドを使用して分析を並列化する
デフォルトの CodeQL分析ワークフロー は言語のビルドマトリクスを使用しており、これにより各言語の解析が並列で実行される� �合があります。 「Initialize CodeQL」ステップで解析する言語を直接指定している� �合、各言語の解析は� �次行われます。 複数の言語で解析を高速化するには、マトリクスを使用するようワークフローを変更してく� さい。 詳しい情� �については、上記「コンパイル言語の自動ビルドの失敗」にあるワークフローの抜粋を参照してく� さい。
1 つのワークフローで分析されるコードの量を減らす
一般的に、分析時間は分析されるコードの量に比例します。 たとえば、テストコードを除外したり、一度にコードのサブセットのみを分析する複数のワークフローに分析を分割したりするなど、一度に分析されるコードの量を減らすことで、分析時間を短縮できます。
Java、C、C++、C# などのコンパイルされた言語の� �合、CodeQL はワークフローの実行中に作成されたすべてのコードを分析します。 分析するコードの量を制限するには、run
ブロックで独自のビルドステップを指定して、分析するコードのみをビルドします。 独自のビルドステップの指定と、pull_request
および push
イベントの paths
または paths-ignore
フィルタの使用を組み合わせて、特定のコードが変更されたときにのみワークフローが実行されるようにすることができます。 詳細については、「GitHub Actionsのワークフロー構文」を参照してく� さい。
For languages like Go, JavaScript, Python, and TypeScript, that CodeQL analyzes without compiling the source code, you can specify additional configuration options to limit the amount of code to analyze. 詳しい情� �については、「スキャンするディレクトリを指定する」を参照してく� さい。
上記のように分析を複数のワークフローに分割する� �合でも、リポジトリ内のすべてのコードを分析する schedule
で実行されるワークフローを少なくとも 1 つ用意することをお勧めします。 CodeQL はコンポーネント間のデータフローを分析するため、一部の複雑なセキュリティ動作は完全なビルドでのみ検出される� �合があります。
schedule
イベント中にのみ実行する
それでも分析が遅すぎるために、push
または pull_request
イベント中に実行できない� �合は、schedule
イベントでのみ分析をトリガーすることをお勧めします。 詳しい情� �については、「イベント」を参照してく� さい。
Check which query suites the workflow runs
By default, there are three main query suites available for each language. If you have optimized the CodeQL database build and the process is still too long, you could reduce the number of queries you run. The default query suite is run automatically; it contains the fastest security queries with the lowest rates of false positive results.
You may be running extra queries or query suites in addition to the default queries. Check whether the workflow defines an additional query suite or additional queries to run using the queries
element. You can experiment with disabling the additional query suite or queries. 詳しい情� �については、「code scanning を設定する」を参照してく� さい。
エラー: 「サーバーエラー」
サーバーエラーにより code scanning のワークフローが実行できない� �合は、ワークフローを再実行してく� さい。 問題が解決しない� �合は、your site administrator にお問い合わせく� さい。
エラー:「ディスク不足」または「メモリ不足」
On very large projects, CodeQL may run out of disk or memory on the runner. この問題が生じたら、ランナー上のメモリを増やしてみてく� さい。
Warning: "git checkout HEAD^2 is no longer necessary"
古いCodeQLワークフローを使っていると、"Initialize CodeQL"アクションからの出力に以下の警告が含まれていることがあります。
Warning: 1 issue was detected with this workflow: git checkout HEAD^2 is no longer
necessary. Please remove this step as Code Scanning recommends analyzing the merge
commit for best results.
これは、以下の行をCodeQLワークフローから削除することによって修正してく� さい。 これらの行は、初期バージョンのCodeQLワークフロー中のAnalyze
ジョブのsteps
セクションに含まれています。
with:
# これがPull Requestであればheadをチェックアウトできるよう、
# 少なくとも直接の親をフェッチしなければならない。
fetch-depth: 2
# この実行がPull Requestのイベントでトリガされたのなら、
# マージコミットの代わりにPull Requestのheadをチェックアウトする。
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
ワークフローの修正されたsteps
セクションは以下のようになります。
steps:
- name: Checkout repository
uses: actions/checkout@v2
# CodeQLツールをスキャンニングのために初期化。
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
...
CodeQL ワークフローファイルの編集に関する詳しい情� �については、「code scanning を編集する」を参照してく� さい。