此版本的 GitHub Enterprise 已停止服务 2021-09-23. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

CI 系统中的 CodeQL 代码扫描故障排除

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

代码扫描 在您拥有 GitHub Advanced Security 的许可证时可用。

Note: The CodeQL runner is being deprecated. Please use the CodeQL CLI version 2.6.2 or greater instead. GitHub Enterprise Server 3.3 will be the final release series that supports the CodeQL runner. On GitHub Enterprise Cloud, the CodeQL runner will be supported until March 2022. For more information, see the CodeQL runner deprecation.

注: 代码扫描 正在测试用于 GitHub Enterprise Server 2.22。 对于代码扫描的一般可用版本,请升级到最新版本的 GitHub Enterprise Server。

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 系统中配置 代码扫描”。

  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 代码扫描”。