设置 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. 在你的存储库名称下,单击 “操作”。

- 如果存储库已设置并运行至少一个工作流,请单击“新建工作流”,然后转到步骤 5。 如果当前没有为存储库配置工作流程,请转到下一步。

- 向下滚动到“安全性”类别,然后在要配置的工作流下单击“配置”,或单击“查看全部”以查看所有可用的安全工作流 。

- 在工作流页面的右窗格中,单击“文档”,然后根据需要按屏幕上的说明定制工作流。
有关详细信息,请参阅“使用初学者工作流”和“配置 code scanning”。
手动设置 code scanning
可以在具有写入权限的任何公共存储库中设置 code scanning。
使用操作运行 code scanning 将消耗分钟数。 有关详细信息,请参阅“关于 GitHub Actions 的计费”。 1. 在 上,导航到存储库的主页。 1. 在存储库名称下,单击“ 安全性”。

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

-
在“开始使用 code scanning”下,单击 CodeQL analysis workflow 或第三方工作流上的“设置此工作流”。
只有在工作流与在存储库中检测到的编程语言相关时,才会显示工作流。 CodeQL analysis workflow 始终显示,但仅在 CodeQL 分析支持存储库中存在的语言时才启用“设置此工作流”按钮。 -
要自定义 code scanning 扫描代码的方式,请编辑工作流程。
通常,可以提交 CodeQL analysis workflow 而无需对其进行任何更改。 但是,许多第三方工作流需要额外的配置,因此请在提交之前读取工作流中的注释。
有关详细信息,请参阅“配置 code scanning”。
-
使用“开始提交”下拉列表,然后键入提交消息。

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

-
单击“提交新文件”或“建议新文件”。
在默认 CodeQL analysis workflow 中,code scanning 配置为在每次将更改推送到默认分支或任何受保护分支或者对默认分支提出拉取请求时分析代码。 因此,code scanning 将立即开始。
用于代码扫描的 on:pull_request 和 on:push 触发器各自用于不同的目的。 有关详细信息,请参阅“扫描拉取请求”和“推送时扫描”。
批量设置 code scanning
您可以使用脚本在多个仓库中一次设置 code scanning。 如果要使用脚本发起将 GitHub Actions 工作流添加到多个存储库的拉取请求,请参阅 jhutchings1/Create-ActionsPRs 存储库,了解使用 PowerShell 的示例,或者对于没有 PowerShell 但希望改用 NodeJS 的团队,请参阅 nickliffen/ghas-enablement。
查看来自 code scanning 的日志记录输出
为仓库设置 code scanning 后,您可以关注操作运行时的输出。
-
在你的存储库名称下,单击 “操作”。

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 工作流程的项目。
-
单击左侧的作业名称。 例如,“分析(语言)”。

-
查看此工作流运行时操作的日志记录输出。
-
在所有作业完成后,您可以查看已识别的任何 code scanning 警报的详细信息。 有关详细信息,请参阅“管理存储库的 code scanning 警报”。
注意:如果发起将 code scanning 工作流添加到存储库的拉取请求,则在合并拉取请求之前,来自该拉取请求的警报不会直接显示在 Code scanning 页面上。 如果发现任何警报,你可以在合并拉取请求之前查看这些警报,方法是在 Code scanning 页面的横幅中单击“发现 n 条警报”的链接。

了解拉取请求检查
设置在拉取请求上运行的每个 code scanning 工作流程始终有至少两个条目列在拉取请求的检查部分中。 工作流程中每个分析作业有一个条目,最后还有一个对应于分析结果的条目。
code scanning 分析检查的名称采用形式:"TOOL NAME / JOB NAME (TRIGGER)"。 例如,对于 CodeQL,C++ 代码的分析有条目 "CodeQL / Analyze (cpp) (pull_request)"。 可单击 code scanning 分析条目上的“详细信息”来查看日志记录数据。 这允许您在分析作业失败时调试问题。 例如,对于编译的语言的 code scanning 分析,如果操作无法生成代码,则可能会发生这种情况。

当 code scanning 作业完成后, GitHub 检查拉取请求是否添加了任何警报,并将“Code scanning 结果/工具名称”条目添加到检查列表中。 在执行至少一次 code scanning 后,可单击“详细信息”查看分析结果。
后续步骤
设置 code scanning 并允许其操作完成后,您可以:
- 查看为此仓库生成的所有 code scanning 警报。 有关详细信息,请参阅“管理存储库的 code scanning 警报”。
- 查看在设置 code scanning 后提交的拉取请求生成的任何警报。 有关详细信息,请参阅“会审拉取请求中的 code scanning 警报”。
- 为已完成的运行设置通知。 有关详细信息,请参阅“配置通知”。
- 查看由 code scanning 分析生成的日志。 有关详细信息,请参阅“查看 code scanning 日志”。
- 调查初始设置 CodeQL code scanning 时发生的任何问题。 有关详细信息,请参阅“排查 CodeQL 工作流的问题”。
- 自定义 code scanning 如何扫描您的仓库中的代码。 有关详细信息,请参阅“配置 code scanning”。