Help us learn about your current experience with the documentation. Take the survey.

GitLab CI/CD artifacts 报告类型

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

使用 artifacts:reports 来:

  • 收集测试报告、代码质量报告、安全报告,以及其他由包含的模板在作业中生成的产物。
  • 其中一些报告用于在以下位置显示信息:

artifacts:reports 创建的产物总是会上传,无论作业结果如何(成功或失败)。 您可以使用 artifacts:expire_in 来设置产物的过期时间,这会覆盖实例的默认设置。 GitLab.com 可能有不同的默认产物过期值

某些 artifacts:reports 类型可以由同一管道中的多个作业生成,并被每个作业的合并请求或管道功能使用。

要浏览报告输出文件,请确保在作业定义中包含 artifacts:paths 关键字。

使用来自子管道的产物在父管道中组合报告不受支持。此功能的支持已在epic 8205中提出。

artifacts:reports:accessibility

accessibility 报告使用 pa11y 来报告合并请求中引入更改的可访问性影响。

GitLab 可以在合并请求的可访问性小部件中显示一个或多个报告的结果。

有关更多信息,请参见可访问性测试

artifacts:reports:annotations

annotations 报告用于将辅助数据附加到作业。

注释报告是一个包含注释部分的 JSON 文件。每个注释部分可以有任何所需的名称,并且可以有任何数量的相同或不同类型的注释。

每个注释是一个单一键(注释类型),包含该注释数据的子键。

注释类型

可以将 external_link 注释附加到作业,以添加到作业输出页面的链接。external_link 注释的值是一个包含以下键的对象:

描述
label 与链接关联的可读标签。
url 链接指向的 URL。

示例报告

以下是作业注释报告可能的样子示例:

{
  "my_annotation_section_1": [
    {
      "external_link": {
        "label": "URL 1",
        "url": "https://url1.example.com/"
      }
    },
    {
      "external_link": {
        "label": "URL 2",
        "url": "https://url2.example.com/"
      }
    }
  ]
}

artifacts:reports:api_fuzzing

  • Tier: Ultimate

api_fuzzing 报告将 API Fuzzing 漏洞 作为产物收集。

GitLab 可以在一个或多个报告中显示结果:

artifacts:reports:browser_performance

  • Tier: Premium, Ultimate

browser_performance 报告将浏览器性能测试指标作为产物收集。此产物是由Sitespeed 插件输出的 JSON 文件。

GitLab 可以在合并请求的浏览器性能测试小部件中显示一个报告的结果。

GitLab 无法显示多个 browser_performance 报告的组合结果。

artifacts:reports:coverage_report

使用 coverage_report: 来收集 Cobertura 或 JaCoCo 格式的覆盖率报告

coverage_format: 可以是 coberturajacoco

Cobertura 最初是为 Java 开发的,但有许多第三方端口用于其他语言,如 JavaScript、Python 和 Ruby。

artifacts:
  reports:
    coverage_report:
      coverage_format: cobertura
      path: coverage/cobertura-coverage.xml

收集的覆盖率报告会上传到 GitLab 作为产物。

您可以生成多个 JaCoCo 或 Cobertura 报告,并使用通配符将它们包含在最终作业产物中。 报告的结果会在最终覆盖率报告中聚合。

覆盖率报告的结果出现在合并请求的差异注释中。

来自子管道的覆盖率报告出现在合并请求差异注释中,但产物本身不会与父管道共享。

artifacts:reports:codequality

codequality 报告收集代码质量问题。收集的代码质量报告会上传到 GitLab 作为产物。

GitLab 可以在一个或多个报告中显示结果:

artifacts:expire_in 值设置为 1 week

artifacts:reports:container_scanning

  • Tier: Ultimate

container_scanning 报告收集容器扫描漏洞。收集的容器扫描报告会上传到 GitLab 作为产物。

GitLab 可以在一个或多个报告中显示结果:

artifacts:reports:coverage_fuzzing

  • Tier: Ultimate

coverage_fuzzing 报告收集覆盖率模糊测试漏洞。收集的覆盖率模糊测试报告会上传到 GitLab 作为产物。 GitLab 可以在一个或多个报告中显示结果:

artifacts:reports:cyclonedx

  • Tier: Ultimate

此报告是软件物料清单,描述遵循 CycloneDX 协议格式项目的组件。

您可以为每个作业指定多个 CycloneDX 报告。这些可以作为文件名列表、文件名模式或两者提供:

  • 文件名模式(cyclonedx: gl-sbom-*.jsonjunit: test-results/**/*.json)。
  • 文件名数组(cyclonedx: [gl-sbom-npm-npm.cdx.json, gl-sbom-bundler-gem.cdx.json])。
  • 两者组合(cyclonedx: [gl-sbom-*.json, my-cyclonedx.json])。
  • 不支持目录(cyclonedx: test-resultscyclonedx: test-results/**)。

以下示例展示了暴露 CycloneDX 产物的作业:

artifacts:
  reports:
    cyclonedx:
      - gl-sbom-npm-npm.cdx.json
      - gl-sbom-bundler-gem.cdx.json

artifacts:reports:dast

  • Tier: Ultimate

dast 报告收集DAST 漏洞。收集的 DAST 报告会上传到 GitLab 作为产物。

GitLab 可以在一个或多个报告中显示结果:

artifacts:reports:dependency_scanning

  • Tier: Ultimate

dependency_scanning 报告收集依赖项扫描漏洞。收集的依赖项扫描报告会上传到 GitLab 作为产物。

GitLab 可以在一个或多个报告中显示结果:

artifacts:reports:dotenv

dotenv 报告将一组环境变量作为产物收集。

收集的变量被注册为作业的运行时创建变量,您可以在后续作业脚本中使用,或在作业完成后设置动态环境 URL

如果 dotenv 报告中存在重复的环境变量,则使用最后指定的那个。

您应该避免在 dotenv 报告中存储敏感数据(如凭据),因为报告可以从管道详情页面下载。如有必要,您可以使用artifacts:access来限制可以下载作业中报告产物的用户。

GitLab 使用 dotenv gem 来处理 dotenv 文件,并且处理 dotenv 文件的方式与原始 dotenv 规则不同:

  • 变量键只能包含字母、数字和下划线 (_)。
  • .env 文件的最大大小为 5 KB。 此限制可以在 GitLab Self-Managed 上更改
  • 在 GitLab.com 上,继承变量的最大数量为 Free 50 个、Premium 100 个、Ultimate 150 个。GitLab Self-Managed 的默认值为 20,可以通过更改 dotenv_variables应用限制来更改。
  • 不支持 .env 文件中的变量替换。
  • 不支持.env 文件中的多行值
  • .env 文件不能有空行或注释(以 # 开头)。
  • env 文件中的键值不能有空格或换行符 (\n),包括使用单引号或双引号时。
  • 解析期间不支持转义引号(key = 'value' -> {key: "value"})。
  • 仅支持 UTF-8 编码支持

artifacts:reports:junit

junit 报告收集JUnit 报告格式 XML 文件。收集的单元测试报告会上传到 GitLab 作为产物。尽管 JUnit 最初是在 Java 中开发的,但有许多第三方端口用于其他语言,如 JavaScript、Python 和 Ruby。

有关更多详细信息和示例,请参见单元测试报告。以下示例展示了如何从 Ruby RSpec 测试中收集 JUnit XML 报告:

rspec:
  stage: test
  script:
    - bundle install
    - rspec --format RspecJunitFormatter --out rspec.xml
  artifacts:
    reports:
      junit: rspec.xml

GitLab 可以在一个或多个报告中显示结果:

某些 JUnit 工具导出到多个 XML 文件。您可以在单个作业中指定多个测试报告路径,将它们连接到单个文件中。使用以下任一方式:

  • 文件名模式(junit: rspec-*.xmljunit: test-results/**/*.xml)。
  • 文件名数组(junit: [rspec-1.xml, rspec-2.xml, rspec-3.xml])。
  • 两者组合(junit: [rspec.xml, test-results/TEST-*.xml])。
  • 不支持目录(junit: test-resultsjunit: test-results/**)。

artifacts:reports:load_performance

  • Tier: Premium, Ultimate

load_performance 报告收集负载性能测试指标。报告会上传到 GitLab 作为产物。

GitLab 可以在合并请求的负载测试小部件中显示一个报告的结果。

GitLab 无法显示多个 load_performance 报告的组合结果。

artifacts:reports:metrics

  • Tier: Premium, Ultimate

metrics 报告收集指标。收集的指标报告会上传到 GitLab 作为产物。

GitLab 可以在合并请求的指标报告小部件中显示一个或多个报告的结果。

artifacts:reports:requirements

  • Tier: Ultimate

requirements 报告收集 requirements.json 文件。收集的需求报告会上传到 GitLab 作为产物,现有的需求会被标记为已满足。

GitLab 可以在一个或多个报告中显示结果,在项目需求中。

artifacts:reports:repository_xray (已弃用)

  • Tier: Premium, Ultimate

repository_xray 报告收集有关您的仓库的信息,供 GitLab Duo Code Suggestions 使用。

此功能在 GitLab 17.6 中已弃用,并计划在 18.0 中移除。请改用启用仓库 X-Ray

artifacts:reports:sast

sast 报告收集SAST 漏洞。 收集的 SAST 报告会上传到 GitLab 作为产物。

有关更多信息,请参见:

artifacts:reports:secret_detection

secret-detection 报告收集检测到的密钥。 收集的密钥检测报告会上传到 GitLab。

GitLab 可以在一个或多个报告中显示结果:

artifacts:reports:terraform

terraform 报告获取 OpenTofu tfplan.json 文件。需要 JQ 处理以移除凭据。 收集的 OpenTofu 计划报告会上传到 GitLab 作为产物。

GitLab 可以在一个或多个报告中显示结果,在合并请求的OpenTofu 小部件中。

有关更多信息,请参见tofu plan 信息输出到合并请求