You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现不同GitLab项目间测试数据共享及CI测试阶段导入

GitLab跨项目公共测试数据接入方案

针对集中存储测试数据的专属项目供多项目CI单测调用的场景,以下是按推荐优先级排序的可落地方案:

方案1:通过内置CI作业令牌拉取测试数据项目(优先推荐)

该方案无需额外管理密钥、权限配置灵活,是绝大多数场景的最优选择:

  1. 先在公共测试数据项目中配置访问权限:进入项目「设置 > CI/CD > 作业令牌权限」,将所有需要调用测试数据的业务项目加入允许访问列表,开启后业务项目的CI作业可以通过内置的CI_JOB_TOKEN免密拉取该项目内容,无需配置Personal Access Token或Deploy Key。
  2. 在业务项目的.gitlab-ci.yml中配置test阶段的数据拉取步骤,示例配置如下:
stages:
  - test

pull_public_test_data:
  stage: test
  script:
    # 浅克隆测试数据项目,仅拉取最新提交减少传输量
    - git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@<你的GitLab内网地址>/<测试数据项目组>/<测试数据项目名>.git ./test-data
    # 若测试数据仓库体积大,可替换为稀疏拉取,仅拉取需要的目录:
    # - git clone --depth 1 --filter=blob:none --sparse https://gitlab-ci-token:${CI_JOB_TOKEN}@<你的GitLab内网地址>/<测试数据项目路径>.git ./test-data
    # - cd ./test-data && git sparse-checkout set <需要的具体数据目录>
  artifacts:
    paths:
      - ./test-data
    expire_in: 1 hour # 测试数据仅为单测临时使用,设置短过期时间节省存储

unit_test:
  stage: test
  needs: [pull_public_test_data] # 等数据拉取完成后再跑单测
  script:
    # 直接读取./test-data目录下的文件执行单测即可,替换为你项目的实际单测命令
    - pytest ./tests -v

方案优势:权限管控粒度细,测试数据项目维护者可随时调整可访问的项目范围;支持Git LFS存储的大体积测试文件;配置维护成本极低。

方案2:将测试数据项目作为Git子模块引入

该方案适合测试数据版本与业务代码版本强绑定的场景:

  1. 在业务项目中把公共测试数据项目添加为Git子模块,固定到对应的数据版本commit。
  2. 在CI配置中开启子模块自动拉取,示例配置如下:
variables:
  GIT_SUBMODULE_STRATEGY: recursive
  GIT_SUBMODULE_FORCE_HTTPS: "true" # 强制HTTPS拉取,自动走CI_JOB_TOKEN鉴权

test:
  stage: test
  script:
    # 代码检出阶段会自动拉取子模块内容到对应目录,直接读取执行单测即可
    - go test -v ./...

方案优势:可以将业务代码与测试数据版本做绑定,避免测试数据更新导致历史版本的单测意外失败。

方案3:测试数据打包上传至GitLab通用包仓库

该方案适合测试数据为固定版本压缩包、不需要频繁拉取全量Git历史的场景:

  1. 在公共测试数据项目的CI中配置流水线,每次数据更新后将测试数据打包为zip/tar.gz格式,上传到GitLab内置的通用包仓库,按版本号管理。
  2. 业务项目CI中直接通过API拉取对应版本的数据包即可,示例命令:
# 拉取指定版本的测试数据压缩包
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${CI_API_V4_URL}/projects/<测试数据项目ID>/packages/generic/test-data/v1.2.0/data.tar.gz" -o data.tar.gz
# 解压到测试目录
tar -zxf data.tar.gz -C ./test-data

方案优势:拉取速度快,不需要拉取Git仓库的提交历史,适合单测仅需要固定版本数据集的场景。

注意事项

  • 禁止将公共测试数据直接拷贝存放到各业务项目仓库,会导致多份数据不一致、业务仓库体积冗余膨胀
  • 拉取测试数据时优先使用浅克隆、稀疏拉取等方式,仅拉取当前需要的文件,降低CI传输耗时
  • 若测试数据包含敏感信息,务必在测试数据项目中配置精确的访问白名单,禁止开放公开访问权限
  • 临时拉取的测试数据工件建议设置1-2小时的短过期时间,避免占用过多GitLab实例存储资源

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:30:45