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

GitLab CI如何在作业间共享文件?缓存配置异常求助

解决GitLab CI作业间共享cache.json缓存的问题

我来帮你梳理下这个问题,你遇到的情况其实是对GitLab CI缓存机制的几个关键点理解有偏差,咱们一步步拆解解决:

问题根源分析

你遇到的cat: cache.json: No such file or directory报错,核心原因有两个:

  1. 缓存的生成前提:GitLab CI不会凭空创建缓存文件,第一次运行作业时,如果cache.json不存在,缓存里自然没有这个文件;而你移除touch命令后,作业因为cat cache.json失败直接终止,根本没机会生成并保存缓存。
  2. 缓存的保存时机:GitLab CI只会在作业成功完成后,才会把paths里指定的文件更新到缓存中。如果作业中途报错终止,缓存不会被更新,后续作业自然拿不到之前的缓存内容。

具体解决方案

方案1:确保首次运行生成缓存文件,保证作业成功完成

修改你的.gitlab-ci.yml,在执行cat命令前先确保cache.json存在,这样第一次运行不会报错,作业成功后缓存会被正确保存:

image: ubuntu
stages:
  - test
cache:
  key: one-cache
  paths:
    - cache.json
job1:
  stage: test
  script:
    # 首次运行创建空文件,后续运行保留缓存中的内容
    - test -f cache.json || touch cache.json
    - cat cache.json
    - python3 modify_json_file.py
    - cat cache.json

这里test -f cache.json || touch cache.json的逻辑是:如果文件不存在就创建它,确保后续命令能正常执行,作业成功完成后GitLab会把cache.json存入缓存,下次作业就能直接读取到了。

方案2:用Artifacts替代缓存(更可靠的持久化方式)

如果cache.json是需要长期保留的重要数据,不建议依赖GitLab缓存(缓存是为了加速构建,可能会被自动清理),更推荐使用Artifacts,它会和构建记录绑定,可靠性更高:

image: ubuntu
stages:
  - test
job1:
  stage: test
  script:
    - test -f cache.json || touch cache.json
    - cat cache.json
    - python3 modify_json_file.py
    - cat cache.json
  artifacts:
    paths:
      - cache.json
    expire_in: 1 week # 可根据需求设置有效期,不设置则默认保留30天

如果后续作业需要使用这个文件,可以通过needs依赖上一次的Artifacts:

job2:
  stage: test
  needs: [job1]
  script:
    - cat cache.json
    - python3 modify_json_file.py

额外注意事项

  • 缓存的key配置:你用了固定的one-cache,意味着所有分支、所有作业都会共享这个缓存;如果是多分支场景,建议把key设置为key: "$CI_COMMIT_BRANCH",避免分支间缓存冲突。
  • Runner配置:如果是自托管Runner,需要确认Runner的配置文件中开启了缓存功能(比如设置了cache_dir),GitLab托管的Runner则无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:06:56