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

GitLab特定流水线缓存失效:Result任务为何无法读取缓存文件?

GitLab流水线缓存失效原因及修复方案

问题根源

你的缓存配置存在语法错误:每个job中的cache字段使用了数组格式(- key: $CI_COMMIT_SHA),这不符合GitLab CI/CD的缓存配置规范。

GitLab要求job级别的cache是一个键值对对象,而非数组。这种错误格式会导致:

  • 全局定义的paths: - dist/被无效覆盖,job无法识别需要缓存的目录
  • 每个阶段执行时,既不会将dist/写入缓存,也不会从缓存读取该目录
  • Result阶段自然找不到前两个阶段生成的文件

修复方案

将每个job中的数组形式cache配置改为标准的键值对格式,或者直接去掉job内的重复cache配置(因为全局已经定义了统一的key和paths,job会自动继承)。

修正后的配置示例

stages:
    - Build
    - Test
    - Result

cache:
    key: $CI_COMMIT_SHA
    paths:
        - dist/

build:
    stage: Build
    script:
        - mkdir -p dist/
        - touch dist/build
    cache:
        key: $CI_COMMIT_SHA

test:
    stage: Test
    script:
        - mkdir -p dist/
        - touch dist/test
    cache:
        key: $CI_COMMIT_SHA

result:
    stage: Result
    script:
        - ls dist/
    cache:
        key: $CI_COMMIT_SHA

更简洁的写法(推荐)

既然全局已经统一配置了缓存key和路径,job可以直接继承,无需重复定义:

stages:
    - Build
    - Test
    - Result

cache:
    key: $CI_COMMIT_SHA
    paths:
        - dist/

build:
    stage: Build
    script:
        - mkdir -p dist/
        - touch dist/build

test:
    stage: Test
    script:
        - mkdir -p dist/
        - touch dist/test

result:
    stage: Result
    script:
        - ls dist/

补充说明

用$CI_COMMIT_SHA作为缓存key的思路是对的,它能保证每个流水线的缓存独立,不会被其他流水线干扰。只要配置格式正确,三个阶段就能正常共享dist/目录的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:52:32