GitLab CI/CD artifacts 报告类型
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
使用 artifacts:reports 来:
- 收集测试报告、代码质量报告、安全报告,以及其他由包含的模板在作业中生成的产物。
- 其中一些报告用于在以下位置显示信息:
- 合并请求。
- 管道视图。
- Security dashboards。
为 artifacts:reports 创建的产物总是会上传,无论作业结果如何(成功或失败)。
您可以使用 artifacts:expire_in 来设置产物的过期时间,这会覆盖实例的默认设置。
GitLab.com 可能有不同的默认产物过期值。
某些 artifacts:reports 类型可以由同一管道中的多个作业生成,并被每个作业的合并请求或管道功能使用。
要浏览报告输出文件,请确保在作业定义中包含 artifacts:paths 关键字。
artifacts:reports:accessibility
accessibility 报告使用 pa11y 来报告合并请求中引入更改的可访问性影响。
GitLab 可以在合并请求的可访问性小部件中显示一个或多个报告的结果。
有关更多信息,请参见可访问性测试。
artifacts:reports:annotations
annotations 报告用于将辅助数据附加到作业。
注释报告是一个包含注释部分的 JSON 文件。每个注释部分可以有任何所需的名称,并且可以有任何数量的相同或不同类型的注释。
每个注释是一个单一键(注释类型),包含该注释数据的子键。
注释类型
external_link
可以将 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 可以在一个或多个报告中显示结果:
- 合并请求安全小部件中。
- 项目漏洞报告中。
- 管道Security 选项卡中。
- 安全仪表板中。
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: 可以是 cobertura 或 jacoco。
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 可以在一个或多个报告中显示结果:
- 合并请求容器扫描小部件中。
- 管道Security 选项卡中。
- 安全仪表板中。
- 项目漏洞报告中。
artifacts:reports:coverage_fuzzing
- Tier: Ultimate
coverage_fuzzing 报告收集覆盖率模糊测试漏洞。收集的覆盖率模糊测试报告会上传到 GitLab 作为产物。
GitLab 可以在一个或多个报告中显示结果:
- 合并请求覆盖率模糊测试小部件中。
- 管道Security 选项卡中。
- 项目漏洞报告中。
- 安全仪表板中。
artifacts:reports:cyclonedx
- Tier: Ultimate
此报告是软件物料清单,描述遵循 CycloneDX 协议格式项目的组件。
您可以为每个作业指定多个 CycloneDX 报告。这些可以作为文件名列表、文件名模式或两者提供:
- 文件名模式(
cyclonedx: gl-sbom-*.json,junit: 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-results,cyclonedx: test-results/**)。
以下示例展示了暴露 CycloneDX 产物的作业:
artifacts:
reports:
cyclonedx:
- gl-sbom-npm-npm.cdx.json
- gl-sbom-bundler-gem.cdx.jsonartifacts:reports:dast
- Tier: Ultimate
dast 报告收集DAST 漏洞。收集的 DAST 报告会上传到 GitLab 作为产物。
GitLab 可以在一个或多个报告中显示结果:
- 合并请求安全小部件中。
- 管道Security 选项卡中。
- 项目漏洞报告中。
- 安全仪表板中。
artifacts:reports:dependency_scanning
- Tier: Ultimate
dependency_scanning 报告收集依赖项扫描漏洞。收集的依赖项扫描报告会上传到 GitLab 作为产物。
GitLab 可以在一个或多个报告中显示结果:
- 合并请求依赖项扫描小部件中。
- 管道Security 选项卡中。
- 安全仪表板中。
- 项目漏洞报告中。
- 依赖项列表中。
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.xmlGitLab 可以在一个或多个报告中显示结果:
某些 JUnit 工具导出到多个 XML 文件。您可以在单个作业中指定多个测试报告路径,将它们连接到单个文件中。使用以下任一方式:
- 文件名模式(
junit: rspec-*.xml,junit: test-results/**/*.xml)。 - 文件名数组(
junit: [rspec-1.xml, rspec-2.xml, rspec-3.xml])。 - 两者组合(
junit: [rspec.xml, test-results/TEST-*.xml])。 - 不支持目录(
junit: test-results,junit: 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 信息输出到合并请求。