如果您的工作流失败并显示错误:“在构建过程中未发现源代码”
或进程 '/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' 退出代码为 32
,则表示 CodeQL 无法监控您的代码。这可能有六个可能的原因
-
不支持的语言: 存储库可能不包含使用 CodeQL 支持的语言编写的源代码。请查看支持的语言列表,如果确实如此,请移除 CodeQL 工作流。有关更多信息,请参阅“关于使用 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-typescript']
有关更多信息,请参阅“一些语言未通过 CodeQL 高级设置进行分析”中的工作流摘录。
-
编译语言的编译失败: 您的代码扫描工作流尝试编译编译语言(C、C++、C#、Go 或 Java),但代码未编译。当工作流为语言指定
build-mode: autobuild
或包含autobuild
步骤时,CodeQL 会尽最大努力检测合适的构建方法并构建您的代码。根据您的特定构建环境,autobuild
过程可能无法成功构建您的代码。如果您已移除autobuild
步骤且未手动包含构建步骤,则编译也可能失败。有关定义构建步骤的更多信息,请参阅“编译语言的 CodeQL 代码扫描”。 -
未检测到缓存的组件: 您的工作流构建编译语言(C、C++、C#、Go 或 Java)以创建用于分析的 CodeQL 数据库,但构建的某些部分已缓存以提高性能(最有可能发生在 Gradle 或 Bazel 等构建系统中)。由于 CodeQL 会观察编译器的活动以了解存储库中的数据流,因此 CodeQL 需要进行完整的构建才能执行分析。
-
在
init
和analyze
步骤之外进行编译: 您的工作流构建编译语言(C、C++、C#、Go 或 Java),但编译未在工作流中的init
和analyze
步骤之间发生。CodeQL 要求您的构建在这两个步骤之间发生,以便观察编译器的活动并执行分析。 -
CodeQL 未检测到编译: 您的编译代码(C、C++、C#、Go 或 Java)已成功编译,但 CodeQL 无法检测到编译器调用。最常见的原因是
- 在与 CodeQL 分开的容器中运行构建过程。有关更多信息,请参阅“在容器中运行 CodeQL 代码扫描”。
- 使用外部于 GitHub Actions 的分布式构建系统,使用守护程序进程进行构建。
- CodeQL 不知道您正在使用的特定编译器。
如果您遇到与您的特定编译器或配置相关的其他问题,请通过GitHub 支持门户联系我们。
有关指定构建步骤的更多信息,请参阅“编译语言的 CodeQL 代码扫描”。