作为在 GitHub 中使用 GitHub Actions 运行 code scanning 的替代方案,你可以在外部持续集成或持续交付/部署 (CI/CD) 系统中分析代码,然后将结果上传到 GitHub。
注意
上传 SARIF 数据以显示为 GitHub 中的 code scanning 结果适用于启用了 GitHub Code Security 的组织拥有的仓库和 GitHub.com 上的公共仓库。 有关详细信息,请参阅“管理存储库的安全和分析设置”。
设置分析工具
首先需要下载所选分析工具,并使用 CI 系统进行设置。
如果你使用的是 CodeQL CLI,你需要将 CodeQL CLI 捆绑包的全部内容提供给要运行 CodeQL code scanning 分析的每个 CI 服务器。 有关详细信息,请参阅“设置 CodeQL CLI”。
将分析工具提供给 CI 系统中的服务器后,即可生成数据。
分析代码
要使用 CodeQL CLI 或其他分析工具分析代码,需要检查要分析的代码并设置代码库环境,确保任何依赖项都可用。 你可能还需要查找代码库的生成命令,通常提供在 CI 系统的配置文件中。
然后,你可以完成分析代码库并生成结果的步骤,这些步骤将因所使用的静态分析工具而异。
如果使用 CodeQL CLI,则首先需要通过代码创建 CodeQL 数据库,然后分析数据库以生成 SARIF 结果。 有关详细信息,请参阅 为 CodeQL 分析准备代码 和 使用 CodeQL 查询分析代码。
生成用于 GitHub 身份验证的令牌
无论使用 CodeQL CLI、REST API 还是其他方法,每个 CI 服务器都需要一个 GitHub App 或 personal access token 来将结果上传到 GitHub。 必须使用具有 security_events 写入权限的访问令牌或 GitHub App。 如果 CI 服务器已使用具有此范围的令牌从 GitHub 检出存储库,则可以考虑使用同一个令牌。 否则,应创建具有 security_events 写入权限的新令牌,然后将其添加到 CI 系统的机密存储中。 有关信息,请参阅 关于创建 GitHub 应用 和 管理个人访问令牌。
有关将结果上传到 GitHub 的不同方法的详细信息,请参阅 将 SARIF 文件上传到 GitHub。
将结果上传到 GitHub
分析代码、生成 SARIF 结果并确保能够通过 GitHub 身份验证后,你可以将结果上传到 GitHub。 有关上传结果的不同方法的详细信息,请参阅 将 SARIF 文件上传到 GitHub。
有关使用 CodeQL CLI 将结果上传到 GitHub 的具体细节,请参阅 将 CodeQL 分析结果上传到 GitHub。
默认情况下, code scanning 预计每个仓库需要一个SARIF 结果文件。 因此,当你上传第二个 SARIF 结果文件进行提交时,将被视为原始数据集的替换。 例如,如果分析工具为它分析的每种语言或使用的每个规则集生成不同的 SARIF 文件,则可能需要上传两个不同的 SARIF 文件以进行一次分析。 如果你想上传多组结果以在存储库中提交,则必须将每组结果标识为唯一的一组结果。 为 SARIF 上传指定类别的方式因分析方法而异。