跳至主要内容

使用代码扫描与您现有的 CI 系统集成

您可以使用 CodeQL CLI 或第三方持续集成系统中的其他工具分析您的代码,并将结果上传到 GitHub。生成的代码扫描警报将与 GitHub 中生成的任何警报一起显示。

谁可以使用此功能?

拥有写入权限的用户

代码扫描适用于以下代码库类型

关于将代码扫描与现有 CI 系统一起使用

作为在 GitHub 中使用 GitHub Actions 运行代码扫描的替代方法,您可以在外部持续集成或持续交付/部署 (CI/CD) 系统中分析代码,然后将结果上传到 GitHub。

您可以将 CodeQL CLI 添加到您的第三方系统,或使用其他可以将结果作为静态分析结果交换格式 (SARIF) 2.1.0 数据生成的第三方静态分析工具。有关受支持的 SARIF 格式的更多信息,请参阅“代码扫描的 SARIF 支持”。

CodeQL CLI 是一款独立的命令行工具,您可以使用它来分析代码。有关更多信息,请参阅“关于 CodeQL CLI”。

您在外部生成的代码扫描警报与您在 GitHub 中生成的代码扫描警报的显示方式相同。如果您使用多个配置运行代码扫描,则警报有时会具有多个分析来源。如果警报有多个分析来源,则您可以在警报页面上查看每个分析来源的警报状态。有关更多信息,请参阅“关于代码扫描警报”。

注意

上传 SARIF 数据以在 GitHub 中显示为代码扫描结果,受启用了 GitHub 高级安全功能的组织自有代码库和 GitHub.com 上的公共代码库支持。有关更多信息,请参阅“管理代码库的安全和分析设置”。

设置您的分析工具

您首先需要下载您选择的分析工具并将其与您的 CI 系统设置。

如果您使用的是 CodeQL CLI,则需要使 CodeQL CLI 捆绑包的全部内容可用于您要在其上运行 CodeQL 代码扫描分析的每个 CI 服务器。有关更多信息,请参阅“设置 CodeQL CLI”。

在您的 CI 系统中使您的分析工具可用于服务器后,您就可以生成数据了。

分析代码

要使用 CodeQL CLI 或其他分析工具分析代码,您需要检出要分析的代码并设置代码库环境,确保所有依赖项都可用。您可能还需要查找代码库的构建命令,该命令通常在 CI 系统的配置文件中可用。

然后,您可以完成分析代码库并生成结果的步骤,这将根据您使用的静态分析工具而有所不同。

如果您使用的是 CodeQL CLI,则首先需要从您的代码创建 CodeQL 数据库,然后分析数据库以生成 SARIF 结果。有关更多信息,请参阅“准备您的代码进行 CodeQL 分析”和“使用 CodeQL 查询分析您的代码”。

生成用于与 GitHub 身份验证的令牌

每个 CI 服务器都需要一个 GitHub 应用或个人访问令牌才能将结果上传到 GitHub,无论您使用的是 CodeQL CLI、REST API 还是其他方法。您必须使用具有 `security_events` 写权限的访问令牌或 GitHub 应用。如果 CI 服务器已经使用具有此作用域的令牌从 GitHub 签出代码库,则您可以使用相同的令牌。否则,您应该创建一个具有 `security_events` 写权限的新令牌,并将其添加到 CI 系统的密钥存储区。更多信息,请参阅“关于创建 GitHub 应用”和“管理您的个人访问令牌”。

有关将结果上传到 GitHub 的不同方法的更多信息,请参阅“将 SARIF 文件上传到 GitHub”。

将您的结果上传到 GitHub

分析完代码、生成 SARIF 结果并确保您可以使用 GitHub 进行身份验证后,即可将结果上传到 GitHub。有关可以使用哪些不同方法上传结果的更多信息,请参阅“将 SARIF 文件上传到 GitHub”。

有关使用 CodeQL CLI 将结果上传到 GitHub 的具体详细信息,请参阅“将 CodeQL 分析结果上传到 GitHub”。

默认情况下,代码扫描预计每个代码库的每次分析只有一个 SARIF 结果文件。因此,当您为提交上传第二个 SARIF 结果文件时,它会被视为原始数据集的替代。例如,如果您的分析工具为其分析的每种语言或其使用的每组规则生成不同的 SARIF 文件,则您可能希望为一次分析上传两个不同的 SARIF 文件。如果要为代码库中的提交上传多个结果集,则必须将每个结果集标识为唯一集。指定 SARIF 上传类别的具体方法会根据分析方法而有所不同。更多信息,请参阅“代码扫描的 SARIF 支持”。