首页/开发/CI/CD 与发布速查/GitLab CI 的 artifacts
工具链要点63 条

GitLab CI 的 artifacts

作业产物:把文件在阶段间传递并留存供下载;可配置过期时间与上传时机,是构建制品在流水线内传递的标准方式。

CI/CD 与发布速查开发更新于 2026-10-13

GitLab artifacts 是什么

作业产物:把文件在阶段间传递并留存供下载,可配置过期时间与上传时机,是构建制品在流水线内传递的标准方式。写法是 artifacts: paths 声明路径;上传时机用 when,默认 on_success,可配 always 或 on_failure;过期用 expire_in 控制保留时长。与 cache 的区别:artifacts 保证传递与留存,cache 是加速层、允许丢失。下游作业在声明 needs 时只能看到依赖作业的产物集合。

基本信息

写法artifacts: paths: [dist/]
时机when 默认 on_success,可配 always 或 on_failure
过期expire_in(如 1 week)
传递控制needs 限制下游可见的产物集合
与 cache 区别artifacts 保证传递;cache 是加速,允许丢失

典型使用场景

  • 构建到测试:编译产物传给测试作业,测试不需要重新构建。
  • 报告留存:测试与扫描报告上传供下载与展示,标准格式还能被平台解析成摘要。
  • 失败现场:用 when 的 always 或 on_failure 保存失败时的日志与截图。
  • 制品出口:把打包产物上传,再由发布作业推送到制品库。
  • 跨作业文件传递:清单与少量配置随制品传递。
  • 过期策略:按用途设置 expire_in,报告短保留、发布制品长保留。

产物配置

产物配置
build:
  stage: build
  script: [make dist]
  artifacts:
    name: "app-$CI_COMMIT_SHORT_SHA"
    paths: [dist/]
    expire_in: 1 week
跨作业传递必需产物用 artifacts;缓存第三方依赖才用 cache,两者语义不同。
默认只在成功时上传:失败现场的产物需要 when: always 或 on_failure 才能保留。
制品对项目成员可见:上传路径检查是否混入环境文件与密钥。

常见报告类产物

reports 键内容平台展示
junit测试结果 XML合并请求里显示用例通过情况
coverage_report覆盖率报告合并请求里显示覆盖率变化
codequality代码质量报告合并请求里列出新增问题
sast安全扫描报告安全面板与合并请求展示

报告类产物配置

报告类产物配置
test:
  script: [pytest --junitxml=report.xml]
  artifacts:
    reports:
      junit: report.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage.xml
    when: always   # 失败也要上传:失败现场的测试报告更需要保留
报告类产物要放进 reports 键才会被平台解析;只写进 paths 只是普通文件,合并请求里不会出现测试与覆盖率面板。
exclude 用来剔除混入的敏感文件;untracked 收集 git 未跟踪文件;公共项目可用 expose_as 把产物链接挂到合并请求页面。

易错点

  • 默认只在成功时上传:失败现场产物丢失,需要 when: always 或 on_failure。
  • 把构建产物只放进 cache:缓存被清理后下游作业拿不到文件。
  • 产物路径写太宽(如整个仓库):体积膨胀,还可能把敏感文件带出去。
  • 过期时间一刀切:报告与发布制品混用同一策略,要么占空间要么留不住。
  • 下载未声明依赖的产物:needs 模式下可见集合受限导致失败,依赖声明要对齐。

数据来源与参考

  • GitLab Docs《Job artifacts》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌