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

为编译语言配置 CodeQL 工作流程

您可以配置 GitHub 如何使用 CodeQL 分析工作流程 扫描用编译语言编写的代码以查找漏洞和错误。

If you have write permissions to a repository, you can configure 代码扫描 for that repository.

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

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

注:站点管理员必须为 您的 GitHub Enterprise Server 实例 启用 代码扫描,然后您才可使用此功能。 如果要使用 GitHub Actions 扫描代码,站点管理员还必须启用 GitHub Actions 并设置所需的基础结构。 更多信息请参阅“为设备配置 代码扫描”。

关于 CodeQL 分析工作流程 和编译语言

通过添加 GitHub Actions 工作流程到仓库,设置 GitHub 对仓库运行 代码扫描。 对于 CodeQL 代码扫描,您可以添加 CodeQL 分析工作流程。 更多信息请参阅“为仓库设置 代码扫描”。

一般情况下无需编辑 代码扫描 的默认工作流程。 但是,如果需要,您可以编辑工作流程以自定义某些设置。 例如,您可以编辑 GitHub 的 CodeQL 分析工作流程 来指定扫描频率、要扫描的语言或目录,以及 CodeQL 代码扫描 在代码中的查找内容。 如果您使用一组特定的命令来编译代码,您可能还需要编辑 CodeQL 分析工作流程。 有关配置 代码扫描 和编辑工作流程文件的一般信息,请参阅“配置 代码扫描”和“了解 GitHub Actions”。

关于 CodeQL 的自动构建

代码扫描的工作方式是对一个或多个数据库运行查询。 每个数据库都包含仓库中所有代码的单一语言表示形式。 对于编译语言 C/C++、C# 和 Java,填充此数据库的过程涉及构建代码和提取数据。 CodeQL 也运行 Go 项目的构建来设置项目。 但是,与其他编译语言相比,仓库中的所有 Go 文件都是提取的,而不仅仅是构建的文件。 您可以使用自定义构建命令跳过提取未受构建影响的 Go 文件。

对于受支持的编译语言,您可以使用 CodeQL 分析工作流程 中的 autobuild 操作来构建代码。 这样您无需为 C/C++、C# 和 Java 指定显式构建命令。

如果您的工作流程使用 language 矩阵,autobuild 将尝试构建矩阵中列出的每种编译语言。 如果不使用矩阵,autobuild 将尝试构建涵盖仓库中最多源文件的受支持编译语言。 除 Go 以外,除非您提供明确的构建命令,否则您仓库中其他编译语言的分析将失败。

:如果使用 GitHub Actions 的自托管运行器,您可能需要安装其他软件才能使用 autobuild 进程。 此外,如果您的仓库需要特定版本的构建工具,您可能需要手动安装它。 更多信息请参阅“GitHub 托管运行器的规范”。

C/C++

支持的系统类型系统名称
操作系统Windows、macOS 和 Linux
构建系统Windows:MSbuild 和构建脚本
Linux 和 macOS:Autoconf、Make、CMake、qmake、Meson、Waf、SCons、Linux Kbuild 和构建脚本

autobuild 步骤的行为因提取运行所在的操作系统而异。 在 Windows 上,autobuild 步骤尝试使用以下方法自动检测合适的 C/C# 构建方法:

  1. 在最接近根目录的解决方案 (.sln) 或项目 (.vcxproj) 文件上调用 MSBuild.exe。 如果 autobuild 在顶层目录下的相同深度(最短)检测到多个解决方案或项目文件,它将尝试构建所有这些文件。
  2. 调用看起来像构建脚本的脚本—build.batbuild.cmd 和 build.exe(按此顺序)。

在 Linux 和 macOS 上,autobuild 步骤检查仓库中存在的文件,以确定所使用的构建系统:

  1. 在根目录中查找构建系统。
  2. 如果未找到,则搜索子目录以查找含有 C/C++ 构建系统的唯一目录。
  3. 运行适当的命令来配置系统。

C

支持的系统类型系统名称
操作系统Windows 和 Linux
构建系统.NET 和 MSbuild,以及构建脚本

autobuild 进程尝试使用以下方法自动检测合适的 C# 构建方法:

  1. 在最接近根目录的解决方案 (.sln) 或项目 (.csproj) 文件上调用 dotnet build
  2. 在最接近根目录的解决方案或项目文件上调用 MSbuild (Linux) 或 MSBuild.exe (Windows)。 如果 autobuild 在顶层目录下的相同深度(最短)检测到多个解决方案或项目文件,它将尝试构建所有这些文件。
  3. 调用一个看起来像构建脚本的脚本—buildbuild.sh(对于 Linux,按此顺序)或 build.batbuild.cmdbuild.exe(对于 Windows,按此顺序)。

Java

支持的系统类型系统名称
操作系统Windows、macOS 和 Linux(无限制)
构建系统Gradle、Maven 和 Ant

autobuild 进程尝试通过应用此策略来确定 Java 代码库的构建系统:

  1. 在根目录中搜索构建文件。 先后检查 Gradle、Maven 和 Ant 构建文件。
  2. 运行找到的第一个构建文件。 如果 Gradle 和 Maven 文件都存在,则使用 Gradle 文件。
  3. 否则,在根目录的直接子目录中搜索构建文件。 如果只有一个子目录包含构建文件,则运行该子目录中标识的第一个文件(使用与 1 相同的首选项)。 如果多个子目录包含构建文件,则报告错误。

添加编译语言的构建步骤

如果仓库中的 C/C++、C# 或 Java 代码含有非标准的构建过程,autobuild 可能会失败。 您需要从工作流程中删除 autobuild 步骤,然后手动添加构建步骤。 如果您要指定仓库中的哪个 Go 文件要提取,则需要添加生成步骤。 有关如何编辑工作流程文件的更多信息,请参阅“配置 代码扫描”。

删除 autobuild 步骤后,请取消注释 run 步骤并添加适合您仓库的构建命令。 工作流程 run 步骤使用操作系统的 shell 运行命令行程序。 您可以修改这些命令并添加更多命令来自定义构建过程。

- run: |
  make bootstrap
  make release

有关 run 关键词的更多信息,请参阅“GitHub Actions 的工作流程语法”。

如果仓库中包含多种编译语言,您可以指定特定于语言的构建命令。 例如,如果您的仓库包含 C/C++、C# 和 Java,并且 autobuild 正确地构建了 C/C++ 和 C#,但未能构建 Java,您可以在 init 步骤之后的工作流程中使用以下配置。 这将指定 Java 的构建步骤,而对 C/C++ 和 C# 仍然使用 autobuild

- if: matrix.language == 'cpp' || matrix.language == 'csharp' 
  name: Autobuild
  uses: github/codeql-action/autobuild@v1

- if: matrix.language == 'java' 
  name: Build Java
  run: |
    make bootstrap
    make release

有关 if 条件的更多信息,请参阅“GitHub 操作的工作流程语法”。

有关为什么 autobuild 无法构建代码的更多提示和技巧,请参阅“CodeQL 工作流程疑难解答”。

如果您为编译语言添加了手动构建步骤,但 代码扫描 仍然无法处理您的仓库,请联系 your site administrator。