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 把产物链接挂到合并请求页面。