此版本的 GitHub Enterprise 已停止服务 2021-09-23. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

为仓库设置代码扫描

您可以通过添加工作流程到仓库来设置 代码扫描。

If you have write permissions to a repository, you can set up or configure 代码扫描 for that repository.

代码扫描 在您拥有 GitHub Advanced Security 的许可证时可用。

注: 代码扫描 正在测试用于 GitHub Enterprise Server 2.22。 对于代码扫描的一般可用版本,请升级到最新版本的 GitHub Enterprise Server。

注:站点管理员必须为 您的 GitHub Enterprise Server 实例 启用 代码扫描,然后您才可使用此功能。 如果要使用 GitHub Actions 扫描代码,站点管理员还必须启用 GitHub Actions 并设置所需的基础结构。 更多信息请参阅“为设备配置 代码扫描”。

设置 代码扫描 的选项

在仓库级别决定如何生成 代码扫描 警报,以及使用哪些工具。 GitHub Enterprise Server 对 CodeQL 分析提供完全集成的支持,还支持使用第三方工具进行分析。 更多信息请参阅“关于 CodeQL”。

分析类型 用于生成警报的选项
| CodeQL | 使用 GitHub Actions(请参阅“[使用操作设置 代码扫描](/github/finding-security-vulnerabilities-and-errors-in-your-code/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-actions)”)或使用第三方持续集成 (CI) 系统中的 CodeQL runner(请参阅“[在 CI 系统中运行 CodeQL 代码扫码](/github/finding-security-vulnerabilities-and-errors-in-your-code/running-codeql-code-scanning-in-your-ci-system)”)。 | 第三‑方 | 使用 GitHub Actions(请参阅“[使用操作设置 代码扫描](/github/finding-security-vulnerabilities-and-errors-in-your-code/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-actions)”)或在外部生成并上传到 GitHub Enterprise Server(请参阅“[将 SARIF 文件上传到 GitHub](/github/finding-security-vulnerabilities-and-errors-in-your-code/uploading-a-sarif-file-to-github)”)。|

使用操作设置 代码扫描

  1. 在 GitHub Enterprise Server 上,导航到仓库的主页面。

  2. 在仓库名称下,单击 Security(安全)Security 选项卡

  3. 在“代码扫描 警报”右侧,单击设置 代码扫描"Set up code scanning" button to the right of "Code scanning" in the Security Overview

  4. Under "Get started with code scanning", click Set up this workflow on the CodeQL 分析工作流程 or on a third-party workflow. "Set up this workflow" button under "Get started with code scanning" heading

  5. Optionally, to customize how 代码扫描 scans your code, edit the workflow. For more information, see "Configuring 代码扫描."

    一般来说,您可以提交 CodeQL 分析工作流程 而不对其做任何更改。 但是,许多第三方工作流程需要额外的配置,因此在提交之前请阅读工作流程中的注释。

    更多信息请参阅“配置 代码扫描。”

  6. 使用 Start commit(开始提交)下拉菜单,并键入提交消息。 开始提交

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

  8. 单击 Commit new file(提交新文件)Propose new file(提议新文件)

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

批量设置 代码扫描

您可以使用脚本在多个仓库中一次设置 代码扫描。 For an example of a script that raises pull requests to add a GitHub Actions workflow to multiple repositories, see the jhutchings1/Create-ActionsPRs repository for an example using Powershell, or nickliffen/ghas-enablement for teams who do not have Powershell and instead would like to use NodeJS.

You decide how you generate 代码扫描 alerts, and which tools you use, at a repository level. GitHub Enterprise Server provides fully integrated support for CodeQL analysis, and also supports analysis using third-party tools. For more information, see "About CodeQL."

为仓库设置 代码扫描 后,您可以关注操作运行时的输出。

  1. 在仓库名称下,单击 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." 条目的文本是提交消息的标题。

    After you commit the workflow file or create a pull request, 代码扫描 will analyze your code according to the frequency you specified in your workflow file. If you created a pull request, 代码扫描 will only analyze the code on the pull request's topic branch until you merge the pull request into the default branch of the repository.

  2. 单击 代码扫描 工作流程的项目。

  3. 单击左侧的作业名称。 例如 Analyze (LANGUAGE)

    代码扫描 工作流程的日志输出

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

  5. 在所有作业完成后,您可以查看已识别的任何 代码扫描 警报的详细信息。 更多信息请参阅“管理仓库的 代码扫描 警报”。

注意: 如果您提出拉取请求以将 代码扫描 工作流程添加到仓库,则在合并拉取请求之前,来自该拉取请求的警报不会直接显示在 代码扫描 页面上。 如果发现任何警报,您可以在合并拉取请求之前查看这些警报,方法是在 代码扫描 页面上的横幅中点击发现的 n 条警报链接。

点击"发现的 n 条警报"链接

了解拉取请求检查

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

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

After a scan completes, you can view alerts from a completed scan. For more information, see "<a href="/github/finding-security-vulnerabilities-and-errors-in-your-code/managing-alerts-from-code-scanning">Managing alerts from 代码扫描</a>."

当 代码扫描 作业完成后, GitHub 检查拉取请求是否添加了任何警报,并将“代码扫描 结果/工具名称”条目添加到检查列表中。 在执行至少一次 代码扫描 后,您可以单击 Details(详细信息)查看分析结果。 如果使用拉取请求将 代码扫描 添加到存储库,则当您单击“代码扫描 结果/工具名称”检查中的 Details(详细信息)时,您最初会看到“Missing analysis(缺少分析)”的消息。

缺少提交消息的分析

“缺少分析”消息的原因

在 代码扫描 分析拉取请求中的代码后,它需要将主题分支(用于创建拉取请求的分支)的分析与基本分支(要合并拉取请求的分支)的分析进行比较。 这允许 代码扫描 计算哪些警报是拉取请求新近引入的,哪些是基础分支中已经存在的,以及是否有任何现有的警报通过拉取请求中的更改来修复。 最初,如果使用拉取请求将 代码扫描 添加到仓库,则尚未分析基础分支,因此无法计算这些详细信息。 在这种情况下,当您从拉取请求的结果检查中点进时,将看到“Missing analysis for base commit SHA-HASH(缺少基础提交 SHA-HASH 的分析)”消息。

在其他情况下,可能没有分析对拉取请求的基础分支的最新提交。 这些包括:

  • 已针对默认分支以外的分支提出拉取请求,并且尚未分析此分支。

    要检查是否扫描了分支,请转到 代码扫描 页面,单击 Branch<(分支)下拉菜单并选择相关分支。

    从 Branch(分支)下拉菜单中选择一个分支

  • 目前正在分析拉取请求的基础分支上的最新提交,分析尚未提供。

    等待几分钟,然后将更改推送到拉取请求以重新触发 代码扫描。

  • 在分析基础分支上的最新提交时发生了错误,且该提交的分析不可用。

    将一个微小的更改合并到基础分支以触发此最新提交的 代码扫描,然后将更改推送到拉取请求以重新触发 代码扫描。

后续步骤

设置 代码扫描 并允许其操作完成后,您可以: