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

如何正确使用GitLab的cache功能实现跨流水线文件传递

GitLab CI跨流水线缓存复用解决方案

GitLab CI的缓存默认采用流水线启动时拉取、Job运行结束后回传的逻辑,且默认会给缓存key自动添加当前分支名作为前缀,跨独立触发的流水线、跨分支的Job默认无法共享最新缓存,这是你遇到job2只能拿到旧文件的根本原因。

具体修改方案

1. 调整流水线配置

修改后的完整.gitlab-ci.yml如下:

job1:
  stage: stage1
  rules:
    - if: $RUN != "run2"
      when: always
    - when: never
  script:
    - mkdir -p data # 避免首次运行时data目录不存在导致写入失败
    - echo "Job stage1 updating file dates.txt"
    - date >> data/dates.txt
    - cat data/dates.txt # 调试用,确认写入内容符合预期
  cache:
    key:
      prefix: "" # 关闭默认分支前缀,实现跨分支、跨流水线共享同一缓存
      name: statusfiles
    paths:
      - data/dates.txt
    when: always # 确保Job运行结束后无论成功失败都上传缓存,调试阶段可保留,正式环境可按需删除

job2:
  stage: stage2
  rules:
    - if: $RUN == "run2"
      when: always
  script:
    - echo "Running stage 2"
    - cat data/dates.txt
  cache:
    key:
      prefix: ""
      name: statusfiles
    paths:
      - data/dates.txt
    policy: pull # Job2仅拉取缓存,不需要回传避免覆盖

2. 检查项目CI缓存配置

  • 进入项目的「设置」→「CI/CD」→「通用管道」页面,确认缓存保留时间没有设置过短,默认保留14天可满足大部分场景需求。
  • 如果你使用私有Runner,确保Runner配置文件中缓存功能正常开启,没有禁用缓存写入权限。

3. 验证流程

  1. 第一次触发流水线,不携带RUN=run2变量,确认Job1运行成功,查看Job1日志中存在「缓存上传成功」的记录,确认data/dates.txt已被打包到缓存中。
  2. 第二次触发流水线,携带RUN=run2变量仅运行Job2,查看Job2日志中拉取的缓存版本和Job1上传的版本一致,即可验证dates.txt内容为最新的追加后内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:15:00