我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

将 SARIF 文件上传到 GitHub

您可以将 SARIF 文件从第三方静态分析工具上传到 GitHub,并且在仓库中看到 代码扫描 来自这些工具的警报。

拥有仓库写入权限的人可从第三方工具上传 代码扫描 数据。

代码扫描 可用于您有 Advanced Security 许可的组织拥有的私有仓库。

本文内容

注意:代码扫描 目前处于测试阶段,可能会更改。 有关参加公测的更多信息,请在此注册

注:站点管理员必须为 your GitHub Enterprise Server instance 启用 代码扫描,然后您才可使用此功能。 更多信息请参阅“为设备配置 代码扫描”。

关于 代码扫描 的 SARIF 文件上传

GitHub 使用静态分析结果交换格式 (SARIF) 文件中的信息创建 代码扫描 警报。 SARIF 文件可通过在用于上传文件的 GitHub Actions 工作流程中运行的 SARIF 兼容分析工具生成。 或者,当文件生成为仓库外部的构件时, 您可以直接将 SARIF 文件推送到仓库,并使用工作流程上传 SARIF 文件。 更多信息请参阅“管理仓库的 代码扫描 警报”。

您可以使用许多静态分析安全测试工具来生成 SARIF 文件,包括 CodeQL。 结果必须使用 SARIF 版本 2.1.0。 更多信息请参阅“关于代码扫描的 SARIF 支持”。

You can upload the results using GitHub Actions (available if your organization is taking part in the beta program), the 代码扫描 API, or the CodeQL runner. 最佳上传方法将取决于您如何生成 SARIF 文件,例如,如果您使用:

  • GitHub Actions 来运行 CodeQL 操作,则无需进一步操作。 CodeQL 操作在完成分析后自动上传 SARIF 文件。
  • "管理工作流程运行"
  • GitHub 将在仓库中显示来自上传的 SARIF 文件的 代码扫描 警报。 If you block the automatic upload, when you are ready to upload results you can use the upload command (for more information, see "Running 代码扫描 in your CI system").
  • 作为仓库外部构件生成结果的工具,您可以使用 代码扫描 API 上传文件(更多信息请参阅“上传 SARIF 文件”)。

通过 GitHub Actions 上传 代码扫描 分析

要将第三方 SARIF 文件上传到 GitHub,需要 GitHub Actions 工作流程。 For more information, see "Learn GitHub Actions" and "Learn GitHub Actions."

您的工作流需要使用 upload-sarif 操作,该操作包含可用于配置上传的输入参数。 它包含可用于配置上传的输入参数。 您将要使用的主要输入参数是 sarif-file,它会配置要上传的文件或 SARIF 文件的目录。 目录或文件路径相对于仓库的根目录。 更多信息请参阅 upload-sarif 操作

upload-sarif 操作可配置为在 push and scheduled 事件发生时运行。 有关 GitHub Actions 事件的更多信息,请参阅“触发工作流程的事件”。

如果您的 SARIF 文件不含 partialFingerprints,则 upload-sarif 操作将为您计算 partialFingerprints 字段,并尝试防止重复警报。 GitHub 仅当仓库同时包含 SARIF 文件和静态分析中使用的源代码时才能创建 partialFingerprints。 有关防止重复警报的更多信息,请参阅“关于代码扫描的 SARIF 支持”。

在存储库外部生成的 SARIF 文件的工作流程示例

您可以创建一个新的工作流程,以在将 SARIF 文件提交到仓库后上传它们。 这在 SARIF 文件生成为仓库外部的构件时很有用。

只要提交被推送到仓库,此示例工作流程就会运行。 该操作使用 partialFingerprints 属性来确定是否发生了更改。 除了推送提交时运行之外,工作流程还预定每周运行一次。 更多信息请参阅“触发工作流程的事件”。

此工作流上传位于仓库根目录中的 results.sarif 文件。 For more information about creating a workflow file, see "Learn GitHub Actions."

或者,您也可以修改此工作流程以上传 SARIF 文件的目录。 例如,您可以将所有 SARIF 文件放在仓库根目录中的 sarif-output 目录中,并将操作的输入参数 sarif_file 设置为 sarif-output

name: "Upload SARIF"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
  push:
  schedule:
  - cron: '0 0 * * 0'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # This step checks out a copy of your repository.
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Upload SARIF file
      uses: github/codeql-action/upload-sarif@v1
      with:
        # Path to SARIF file relative to the root of the repository
        sarif_file: results.sarif

运行 ESLint 分析工具的示例工作流程

如果将第三方 SARIF 文件生成为持续集成 (CI) 工作流程的一部分,您可以将 upload-sarif 操作添加为运行 CI 测试后的一个步骤。 如果您还没有 CI 工作流程,可以使用 GitHub Actions 模板创建一个。 更多信息请参阅“GitHub Actions 快速入门”。

只要提交被推送到仓库,此示例工作流程就会运行。 该操作使用 partialFingerprints 属性来确定是否发生了更改。 除了推送提交时运行之外,工作流程还预定每周运行一次。 更多信息请参阅“触发工作流程的事件”。

工作流程显示了将 ESLint 静态分析工具作为工作流程中一个步骤运行的示例。 Run ESLint 步骤运行 ESLint 工具,输出 results.sarif 文件。 然后,工作流程使用 upload-sarif 操作将 results.sarif 文件上传到 GitHub。 For more information about creating a workflow file, see "Introduction to GitHub Actions."

name: "ESLint analysis"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
  push:
  schedule:
  - cron: '0 0 * * 0'

jobs:
  build:
    steps:
    - uses: actions/checkout@v2
    - name: Run npm install
      run: npm install
    # Runs the ESlint code analysis
    - name: Run ESLint
      # eslint exits 1 if it finds anything to report
      run: node_modules/.bin/eslint build docs lib script spec-main -f node_modules/@microsoft/eslint-formatter-sarif/sarif.js -o results.sarif || true
    # Uploads results.sarif to GitHub repository using the upload-sarif action
    - uses: github/codeql-action/upload-sarif@v1
      with:
        # Path to SARIF file relative to the root of the repository
        sarif_file: results.sarif

延伸阅读

此文档对您有帮助吗?

Privacy policy

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。