缓存文件在我的GitLab CI管道中消失了

时间:2018-01-31 08:55:10

标签: gitlab gitlab-ci

我试图为单声道存储库设置GitLab CI。

为了论证,我们假设我要处理2个JavaScript包:

  • 应用
  • CLI

我已定义了3个阶段:

  • 安装
  • 测试
  • 构建
  • 部署

因为我正在重复使用之前步骤中的文件,所以我使用了GitLab缓存。

我的配置如下:

stages:
  - install
  - test
  - build
  - deploy

install_app:
  stage: install
  image: node:8.9
  cache:
    policy: push
    paths:
      - app/node_modules
  script:
    - cd app
    - npm install

install_cli:
  stage: install
  image: node:8.9
  cache:
    policy: push
    paths:
      - cli/node_modules
  script:
    - cd cli
    - npm install

test_app:
  image: node:8.9
  cache:
    policy: pull
    paths:
      - app/node_modules
  script:
    - cd app
    - npm test

test_cli:
  image: node:8.9
  cache:
    policy: pull
    paths:
      - cli/node_modules
  script:
    - cd cli
    - npm test

build_app:
  stage: build
  image: node:8.9
  cache:
    paths:
      - app/node_modules
      - app/build
  script:
    - cd app
    - npm run build

deploy_app:
  stage: deploy
  image: registry.gitlab.com/my/gcloud/image
  only:
    - master
  environment:
    name: staging
    url: https://example.com
  cache:
    policy: pull
    paths:
      - app/build
  script:
    - gcloud app deploy app/build/app.yaml
        --verbosity info
        --version master
        --promote
        --stop-previous-version
        --quiet
        --project "$GOOGLE_CLOUD_PROJECT"

问题出在测试阶段。大多数情况下test_app作业失败,因为缺少app/node_modules目录。有时重试是有效的,但大部分都没有。

另外,我想为build_app作业使用两个缓存。我想提取app/node_modules并推送app/build。我无法找到实现这一目标的方法。这让我觉得我不完全理解缓存是如何工作的。

为什么我的缓存文件消失了?我是否误解了GitLab CI缓存的工作原理?

1 个答案:

答案 0 :(得分:1)

缓存是在尽力而为的基础上提供的,因此不要指望缓存始终存在。

如果您的作业之间存在硬依赖关系,请使用artifactsdependencies

无论如何,如果它仅适用于node_modules,我建议你在每一步安装它,而不是使用工件 - 你不会在工件上节省太多时间。