Skip to main content

此版本的 GitHub Enterprise 已停止服务 2022-10-12. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

CI 系统中的 CodeQL 运行器故障排除

如果您在 CodeQL runner 方面遇到问题,可使用这些提示来排除故障。

Code scanning is available for organization-owned repositories in GitHub Enterprise Server. This feature requires a license for GitHub Advanced Security. 有关详细信息,请参阅“关于 GitHub Advanced Security”。

注意:CodeQL runner 将被弃用。 对于 GitHub Enterprise Server 3.0及更高版本,可以安装 CodeQL CLI 版本 2.6.3 来替换 CodeQL runner。

有关详细信息,请参阅 CodeQL 运行器弃用。 有关迁移到 CodeQL CLI 的信息,请参阅从 CodeQL 运行器迁移到 CodeQL CLI

init 命令花费的时间太长

在 CodeQL runner 可以构建和分析代� �之前,它需要访问 CodeQL 包,其中包含 CodeQL CLI 和 CodeQL 库。

首次在计算机上使用 CodeQL runner 时,init 命令会将 CodeQL 包下载到� 的计算机上。 此下载可能需要� 分钟时间。 CodeQL 包在运行之间缓存,� 此如果您在同一台计算机上再次使用 CodeQL runner,它不会再次下载 CodeQL 包。

为避免这种自动下载,� 可以手动将 CodeQL 包下载到� 的计算机上,并使用 init 命令的 --codeql-path � �志指定路径。

构建过程中找不到代� �

如果用于 CodeQL runner 的 analyze 命令失败并返回错误 No source code was seen during the build,这表明 CodeQL � 法监视� 的代� �。 有� 个原� 可以解释这种失败。

  1. 自动语言检测发现了受支持的语言,但仓库中没有该语言的可分析代� �。 一个典型的例子是,我们的语言检测服务发现了一个与特定的编程语言相关的文件,例如 .h.gyp 文件,但存储库中没有相应的可执行代� �。 要解决此问题,� 可以使用 init 命令的 --languages � �志,手动定义要分析的语言。 有关详细信息,请参阅在 CI 系统中配置 CodeQL runner

  2. � 没有使用 autobuild 命令分析编译语言,并且在 init 步骤后手动运行构建步骤。 要使构建正常工作,您必须设置环境,使 CodeQL runner 能够监视构建流程。 init 命令生成如何导出所需环境变量的指令, � 此� 可以在运行 init 命令后复制和运行脚本。

    • 在 macOS 和 Linux 上:
      $ . codeql-runner/codeql-env.sh
    • 在 Windows 上,使用命令 shell (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. � 没有使用 autobuild 命令分析 macOS 上的编译语言,并且在 init 步骤后手动运行构建步骤。 如果启用了 SIP(系统完整性保护,OSX 最新版本默认启用),则分析可能会失败。 为解决此问题,将使用 $CODEQL_RUNNER 环境变量前缀构建命令。 例如,如果构建命令为 cmd arg1 arg2,则应运行 $CODEQL_RUNNER cmd arg1 arg2

  4. 代� �在容器或在单独的计算机上构建。 如果您使用容器化的构建,或者将构建外包给另一台计算机,请确保在容器或您执行构建任务的计算机上运行 CodeQL runner。 有关详细信息,请参阅在容器中运行 CodeQL 代� �扫描