跳至主要内容

错误:“在构建过程中未发现源代码”

如果 CodeQL 找不到任何源代码,则需要解决此问题才能解除代码扫描分析的阻塞。

如果您的工作流失败并显示错误:“在构建过程中未发现源代码”进程 '/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' 退出代码为 32,则表示 CodeQL 无法监控您的代码。这可能有六个可能的原因

  1. 不支持的语言: 存储库可能不包含使用 CodeQL 支持的语言编写的源代码。请查看支持的语言列表,如果确实如此,请移除 CodeQL 工作流。有关更多信息,请参阅“关于使用 CodeQL 进行代码扫描”。

  2. 未检测到可分析的已检测语言代码: 自动语言检测识别了一种受支持的语言,但存储库中没有该语言的可分析代码。一个典型的例子是,当我们的语言检测服务找到与特定编程语言(如.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 高级设置进行分析”中的工作流摘录。

  3. 编译语言的编译失败: 您的代码扫描工作流尝试编译编译语言(C、C++、C#、Go 或 Java),但代码未编译。当工作流为语言指定build-mode: autobuild或包含autobuild步骤时,CodeQL 会尽最大努力检测合适的构建方法并构建您的代码。根据您的特定构建环境,autobuild过程可能无法成功构建您的代码。如果您已移除autobuild步骤且未手动包含构建步骤,则编译也可能失败。有关定义构建步骤的更多信息,请参阅“编译语言的 CodeQL 代码扫描”。

  4. 未检测到缓存的组件: 您的工作流构建编译语言(C、C++、C#、Go 或 Java)以创建用于分析的 CodeQL 数据库,但构建的某些部分已缓存以提高性能(最有可能发生在 Gradle 或 Bazel 等构建系统中)。由于 CodeQL 会观察编译器的活动以了解存储库中的数据流,因此 CodeQL 需要进行完整的构建才能执行分析。

  5. initanalyze步骤之外进行编译: 您的工作流构建编译语言(C、C++、C#、Go 或 Java),但编译未在工作流中的initanalyze步骤之间发生。CodeQL 要求您的构建在这两个步骤之间发生,以便观察编译器的活动并执行分析。

  6. CodeQL 未检测到编译: 您的编译代码(C、C++、C#、Go 或 Java)已成功编译,但 CodeQL 无法检测到编译器调用。最常见的原因是

    • 在与 CodeQL 分开的容器中运行构建过程。有关更多信息,请参阅“在容器中运行 CodeQL 代码扫描”。
    • 使用外部于 GitHub Actions 的分布式构建系统,使用守护程序进程进行构建。
    • CodeQL 不知道您正在使用的特定编译器。

如果您遇到与您的特定编译器或配置相关的其他问题,请通过GitHub 支持门户联系我们。

有关指定构建步骤的更多信息,请参阅“编译语言的 CodeQL 代码扫描”。