设置 代码扫描 的选项
在仓库级别决定如何生成 代码扫描 警报,以及使用哪些工具。 GitHub 对 CodeQL 分析提供完全集成的支持,还支持使用第三方工具进行分析。 更多信息请参阅“关于 CodeQL”。
|
用于生成警报的选项 |
---|---|
CodeQL | 使用 GitHub Actions(请参阅“使用操作设置 代码扫描”)或使用第三方持续集成 (CI) 系统中的 CodeQL runner(请参阅“在 CI 系统中运行 CodeQL”)。 |
第三方 | 使用 GitHub Actions(请参阅“使用操作设置 代码扫描”)或在外部生成并上传到 GitHub(请参阅“将 SARIF 文件上传到 GitHub”)。 |
使用操作设置 代码扫描
使用操作运行 代码扫描 需时数分钟。 更多信息请参阅“关于 GitHub Actions 的计费.”
-
在 GitHub 上,导航到仓库的主页面。
-
在仓库名称下,单击 Security(安全)。
-
在“代码扫描 警报”右侧,单击设置 代码扫描。 如果 代码扫描 缺少,您必须要求组织所有者或仓库管理员启用 GitHub Advanced Security。 更多信息请参阅“管理组织的安全性和分析设置”或“管理仓库的安全和分析设置”。
-
Under "Get started with code scanning", click Set up this workflow on the CodeQL 分析工作流程 or on a third-party workflow.
-
Optionally, to customize how 代码扫描 scans your code, edit the workflow. For more information, see "Configuring 代码扫描."
一般来说,您可以提交 CodeQL 分析工作流程 而不对其做任何更改。 但是,许多第三方工作流程需要额外的配置,因此在提交之前请阅读工作流程中的注释。
更多信息请参阅“配置 代码扫描。”
-
使用 Start commit(开始提交)下拉菜单,并键入提交消息。
-
选择您是想直接提交到默认分支,还是创建新分支并启动拉取请求。
-
单击 Commit new file(提交新文件)或 Propose new file(提议新文件)。
在默认 CodeQL 分析工作流程 中,代码扫描 配置为在每次将更改推送到默认分支或任何受保护分支或者对默认分支提出拉取请求时分析代码。 因此,代码扫描 将立即开始。
批量设置 代码扫描
您可以使用脚本在多个仓库中一次设置 代码扫描。 有关提出拉取请求以向多个仓库添加 GitHub Actions 工作流程的脚本示例,请参阅 jhutchings1/Create-ActionsPRs
仓库。
You decide how you generate 代码扫描 alerts, and which tools you use, at a repository level. GitHub provides fully integrated support for CodeQL analysis, and also supports analysis using third-party tools. For more information, see "About CodeQL."
为仓库设置 代码扫描 后,您可以关注操作运行时的输出。
-
在仓库名称下,单击 Actions(操作)。
You can view the run status of 代码扫描 and get notifications for completed runs. For more information, see "Managing a workflow run" and "Configuring notifications." 条目的文本是提交消息的标题。
-
单击 代码扫描 工作流程的项目。
-
单击左侧的作业名称。 例如 Analyze (LANGUAGE)。
-
查看此工作流运行时操作的日志记录输出。
-
在所有作业完成后,您可以查看已识别的任何 代码扫描 警报的详细信息。 更多信息请参阅“管理仓库的 代码扫描 警报”。
注意: 如果您提出拉取请求以将 代码扫描 工作流程添加到仓库,则在合并拉取请求之前,来自该拉取请求的警报不会直接显示在 代码扫描 页面上。 如果发现任何警报,您可以在合并拉取请求之前查看这些警报,方法是在 代码扫描 页面上的横幅中点击发现的 n 条警报链接。
了解拉取请求检查
设置在拉取请求上运行的每个 代码扫描 工作流程始终有至少两个条目列在拉取请求的检查部分中。 工作流程中每个分析作业有一个条目,最后还有一个对应于分析结果的条目。
代码扫描 分析检查的名称采用形式:"TOOL NAME / JOB NAME (TRIGGER)"。 例如,对于 CodeQL,C++ 代码的分析有条目 "CodeQL / Analyze (cpp) (pull_request)"。 您可以单击 代码扫描 分析条目上的Details(详细信息)来查看日志记录数据。 这允许您在分析作业失败时调试问题。 例如,对于编译的语言的 代码扫描 分析,如果操作无法生成代码,则可能会发生这种情况。
当 代码扫描 作业完成后, GitHub 检查拉取请求是否添加了任何警报,并将“代码扫描 结果/工具名称”条目添加到检查列表中。 在执行至少一次 代码扫描 后,您可以单击 Details(详细信息)查看分析结果。 如果使用拉取请求将 代码扫描 添加到存储库,则当您单击“代码扫描 结果/工具名称”检查中的 Details(详细信息)时,您最初会看到“Missing analysis(缺少分析)”的消息。
“缺少分析”消息的原因
在 代码扫描 分析拉取请求中的代码后,它需要将主题分支(用于创建拉取请求的分支)的分析与基本分支(要合并拉取请求的分支)的分析进行比较。 这允许 代码扫描 计算哪些警报是拉取请求新近引入的,哪些是基础分支中已经存在的,以及是否有任何现有的警报通过拉取请求中的更改来修复。 最初,如果使用拉取请求将 代码扫描 添加到仓库,则尚未分析基础分支,因此无法计算这些详细信息。 在这种情况下,当您从拉取请求的结果检查中点进时,将看到“Missing analysis for base commit SHA-HASH(缺少基础提交 SHA-HASH 的分析)”消息。
在其他情况下,可能没有分析对拉取请求的基础分支的最新提交。 这些包括:
-
已针对默认分支以外的分支提出拉取请求,并且尚未分析此分支。
要检查是否扫描了分支,请转到 代码扫描 页面,单击 Branch<(分支)下拉菜单并选择相关分支。
Using actions to run 代码扫描 will use minutes. For more information, see "About billing for GitHub Actions."
-
目前正在分析拉取请求的基础分支上的最新提交,分析尚未提供。
等待几分钟,然后将更改推送到拉取请求以重新触发 代码扫描。
-
在分析基础分支上的最新提交时发生了错误,且该提交的分析不可用。
将一个微小的更改合并到基础分支以触发此最新提交的 代码扫描,然后将更改推送到拉取请求以重新触发 代码扫描。
后续步骤
设置 代码扫描 并允许其操作完成后,您可以:
- 查看为此仓库生成的所有 代码扫描 警报。 更多信息请参阅“管理仓库的 代码扫描 警报”。
- 查看在设置 代码扫描 后提交的拉取请求生成的任何警报。 更多信息请参阅“对拉取请求中的 代码扫描 警报分类”。
- 为已完成的运行设置通知。 更多信息请参阅“配置通知”。
- 调查初始设置 CodeQL 代码扫描 时发生的任何问题。 更多信息请参阅“CodeQL 工作流程疑难解答”。
- 自定义 代码扫描 如何扫描您的仓库中的代码。 更多信息请参阅“配置 代码扫描。”