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

将 SARIF 文件上传到 GitHub

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

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

本文内容

Did this doc help you?

注意:代码扫描 目前处于测试阶段,可能会更改。 To request access to the beta, join the waitlist.

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

GitHub creates 代码扫描 alerts in a repository using information from Static Analysis Results Interchange Format (SARIF) files. SARIF 文件可通过在用于上传文件的 GitHub Actions 工作流程中运行的 SARIF 兼容分析工具生成。 或者,当文件生成为仓库外部的构件时, 您可以直接将 SARIF 文件推送到仓库,并使用工作流程上传 SARIF 文件。 更多信息请参阅“管理来自 代码扫描 的警报”。

You can generate SARIF files using many static analysis security testing tools, including CodeQL. The results must use SARIF version 2.1.0. 更多信息请参阅“关于代码扫描的 SARIF 支持”。

You can upload the results using GitHub Actions, the 代码扫描 API, or the CodeQL runner. The best upload method will depend on how you generate the SARIF file, for example, if you use:

  • GitHub Actions to run the CodeQL action, there is no further action required. The CodeQL action uploads the SARIF file automatically when it completes analysis.
  • "管理工作流程运行"
  • GitHub 将在仓库中显示来自上传的 SARIF 文件的 代码扫描 警报。 更多信息请参阅“管理来自 代码扫描 的警报”。
  • A tool that generates results as an artifact outside of your repository, you can use the 代码扫描 API to upload the file (for more information, see "Upload a SARIF file").

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

要将第三方 SARIF 文件上传到 GitHub,需要 GitHub Actions 工作流程。 更多信息请参阅“关于 GitHub Actions”和“配置工作流程”。

您的工作流需要使用 upload-sarif 操作,该操作包含可用于配置上传的输入参数。 It has input parameters that you can use to configure the upload. 您将要使用的主要输入参数是 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 文件。 有关创建工作流程文件的更多信息,请参阅“配置工作流程”。

或者,您也可以修改此工作流程以上传 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 模板创建一个。 更多信息请参阅“从预配置的工作流程模板开始”。

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

工作流程显示了将 ESLint 静态分析工具作为工作流程中一个步骤运行的示例。 Run ESLint 步骤运行 ESLint 工具,输出 results.sarif 文件。 然后,工作流程使用 upload-sarif 操作将 results.sarif 文件上传到 GitHub。 有关创建工作流程文件的更多信息,请参阅“配置工作流程”。

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

延伸阅读

Did this doc help you?