Skip to main content

为仓库设置代码扫描

您可以通过添加工作流程到仓库来设置 code scanning。

Who can use this feature

If you have write permissions to a repository, you can set up or configure code scanning for that repository.

Code scanning 可用于 GitHub.com 上的所有公共存储库。 Code scanning 也可用于使用 GitHub Enterprise Cloud 并拥有 GitHub Advanced Security 许可证的组织所拥有的专用存储库。 有关详细信息,请参阅“关于 GitHub Advanced Security”。

设置 code scanning 的选项

在仓库级别决定如何生成 code scanning 警报,以及使用哪些工具。 GitHub 对 CodeQL 分析提供完全集成的支持,还支持使用第三方工具进行分析。 有关详细信息,请参阅“关于 code scanning”。

分析类型用于生成警报的选项
CodeQL使用 GitHub Actions(请参阅“使用操作设置 code scanning”),或在第三方持续集成 (CI) 系统中运行 CodeQL 分析(请参阅“关于 CI 系统中的 CodeQL code scanning”)。
第三方使用 GitHub Actions(请参阅“使用操作设置 code scanning”)或从外部生成并上传到 GitHub(请参阅“将 SARIF 文件上传到 GitHub”)。

如果使用多个配置运行代码扫描,则有时警报会有多个分析源。 如果警报有多个分析源,你可在警报页上查看每个分析源的警报状态。 有关详细信息,请参阅“关于分析源”。

使用入门工作流设置 code scanning

注意:Advanced Security 的初始工作流已合并到存储库的“操作”选项卡中的“安全”类别中。 这种新配置目前处于 beta 版本,可能会有变动。

GitHub 为 code scanning 等安全功能提供起始工作流。 您可以使用这些建议的工作流程来构建 code scanning 工作流程,而不是从头开始。 Code scanning 入门工作流仅在启用了 code scanning 时才可用于您的存储库。

使用操作运行 code scanning 将消耗分钟数。 有关详细信息,请参阅“关于 GitHub Actions 的计费”。

  1. 在 上,导航到存储库的主页。 1. 在你的存储库名称下,单击 “操作”。 主存储库导航中的“操作”选项卡
  2. 如果存储库已设置并运行至少一个工作流,请单击“新建工作流”,然后转到步骤 5。 如果当前没有为存储库配置工作流程,请转到下一步。 “新建工作流”按钮的屏幕截图
  3. 向下滚动到“安全性”类别,然后在要配置的工作流下单击“配置”,或单击“查看全部”以查看所有可用的安全工作流 。 Actions 工作流安全性部分的屏幕截图
  4. 在工作流页面的右窗格中,单击“文档”,然后根据需要按屏幕上的说明定制工作流。 初学者工作流的“文档”选项卡的屏幕截图 有关详细信息,请参阅“使用初学者工作流”和“配置 code scanning”。

手动设置 code scanning

可以在具有写入权限的任何公共存储库中设置 code scanning。

使用操作运行 code scanning 将消耗分钟数。 有关详细信息,请参阅“关于 GitHub Actions 的计费”。 1. 在 上,导航到存储库的主页。 1. 在存储库名称下,单击“ 安全性”。 “安全”选项卡

  1. 在“Code scanning 警报”右侧,单击“设置 code scanning”。有关详细信息,请参阅“管理组织的安全性和分析设置”或“管理存储库的安全性和分析设置”。 安全概览中“Code scanning”右侧的“设置 code scanning”按钮

  2. 在“开始使用 code scanning”下,单击 CodeQL analysis workflow 或第三方工作流上的“设置此工作流”。 “开始使用 code scanning”标题下的“设置此工作流”按钮只有在工作流与在存储库中检测到的编程语言相关时,才会显示工作流。 CodeQL analysis workflow 始终显示,但仅在 CodeQL 分析支持存储库中存在的语言时才启用“设置此工作流”按钮。

  3. 要自定义 code scanning 扫描代码的方式,请编辑工作流程。

    通常,可以提交 CodeQL analysis workflow 而无需对其进行任何更改。 但是,许多第三方工作流需要额外的配置,因此请在提交之前读取工作流中的注释。

    有关详细信息,请参阅“配置 code scanning”。

  4. 使用“开始提交”下拉列表,然后键入提交消息。 开始提交

  5. 选择是直接提交到默认分支,还是创建新分支并启动拉取请求。 选择提交位置

  6. 单击“提交新文件”或“建议新文件”。

在默认 CodeQL analysis workflow 中,code scanning 配置为在每次将更改推送到默认分支或任何受保护分支或者对默认分支提出拉取请求时分析代码。 因此,code scanning 将立即开始。

用于代码扫描的 on:pull_requeston:push 触发器各自用于不同的目的。 有关详细信息,请参阅“扫描拉取请求”和“推送时扫描”。

批量设置 code scanning

您可以使用脚本在多个仓库中一次设置 code scanning。 如果要使用脚本发起将 GitHub Actions 工作流添加到多个存储库的拉取请求,请参阅 jhutchings1/Create-ActionsPRs 存储库,了解使用 PowerShell 的示例,或者对于没有 PowerShell 但希望改用 NodeJS 的团队,请参阅 nickliffen/ghas-enablement

查看来自 code scanning 的日志记录输出

为仓库设置 code scanning 后,您可以关注操作运行时的输出。

  1. 在你的存储库名称下,单击 “操作”。 主存储库导航中的“操作”选项卡

    You can view the run status of code scanning and get notifications for completed runs. For more information, see "Managing a workflow run" and "Configuring notifications." 条目的文本是提交消息的标题。

    显示 code scanning 工作流的操作列表

  2. 单击 code scanning 工作流程的项目。

  3. 单击左侧的作业名称。 例如,“分析(语言)”。

    code scanning 工作流程的日志输出

  4. 查看此工作流运行时操作的日志记录输出。

  5. 在所有作业完成后,您可以查看已识别的任何 code scanning 警报的详细信息。 有关详细信息,请参阅“管理存储库的 code scanning 警报”。

注意:如果发起将 code scanning 工作流添加到存储库的拉取请求,则在合并拉取请求之前,来自该拉取请求的警报不会直接显示在 Code scanning 页面上。 如果发现任何警报,你可以在合并拉取请求之前查看这些警报,方法是在 Code scanning 页面的横幅中单击“发现 n 条警报”的链接。

单击“发现的 n 条警报”链接

了解拉取请求检查

设置在拉取请求上运行的每个 code scanning 工作流程始终有至少两个条目列在拉取请求的检查部分中。 工作流程中每个分析作业有一个条目,最后还有一个对应于分析结果的条目。

code scanning 分析检查的名称采用形式:"TOOL NAME / JOB NAME (TRIGGER)"。 例如,对于 CodeQL,C++ 代码的分析有条目 "CodeQL / Analyze (cpp) (pull_request)"。 可单击 code scanning 分析条目上的“详细信息”来查看日志记录数据。 这允许您在分析作业失败时调试问题。 例如,对于编译的语言的 code scanning 分析,如果操作无法生成代码,则可能会发生这种情况。

code scanning 拉取请求检查

当 code scanning 作业完成后, GitHub 检查拉取请求是否添加了任何警报,并将“Code scanning 结果/工具名称”条目添加到检查列表中。 在执行至少一次 code scanning 后,可单击“详细信息”查看分析结果。

后续步骤

设置 code scanning 并允许其操作完成后,您可以: