gitlab-ci部署前端项目关于缓存的问题

# 流程
stages:
  - install
  - build
  - deploy

# 缓存
cache:
  paths:
    - node_modules/
    - dist/

# 安装依赖
install:
  stage: install
  only:
    - test
  tags:
    - test-vue
  script:
    - cnpm install
    - whoami
    - ls

# 构建
build:
  stage: build
  only:
    - test
  tags:
    - test-vue
  script:
    - pwd 
    - whoami
    - npm run build
  artifacts:
    name: 'bundle'
    paths: 
      - dist/

# 部署开发服务器
deploy:
  stage: deploy
  only:
    - test
  tags:
    - test-vue
  script:
    - "[[ -z ${CI_PROJECT_PATH_SLUG} ]] && echo 'CI_PROJECT_PATH_SLUG is empty.' && exit 1"
    - "webpath=/www/web/${CI_PROJECT_PATH_SLUG}"
    - rsync -azv dist/  ${webpath}
    - echo ${webpath}

问题在全部设置了cache,然后部署的时候读取了dist里面的缓存,这样部署的都是缓存,可是不设置缓存,在不同job里面生成的内容没办法进入下一阶段,就会提示找不到文件的问题,该如何解决?

阅读 3.9k
1 个回答

题主把cache放在根节点,就会在每个阶段的job中都重新拉取一次缓存,更新一次缓存。

Gitlab-CI,其实可以为每个不同的job定制不同的缓存和策略。

把缓存设置放到job里:

  1. install的时候拉取并更新缓存
  2. build的时候只拉取install更新的缓存,并生成dist的artifacts
  3. deploy的时候只用artifacts生成的dist,不用缓存。
# 流程
stages:
  - install
  - build
  - deploy

# 安装依赖
install:
  stage: install
  only:
    - test
  tags:
    - test-vue
  # 拉取并更新缓存
  cache:
    paths:
      - node_modules/
    policy: pull-push
  script:
    - cnpm install
    - whoami
    - ls

# 构建
build:
  stage: build
  only:
    - test
  tags:
    - test-vue
  # 只拉取缓存
  cache:
    paths:
      - node_modules/
    policy: pull
  script:
    - pwd 
    - whoami
    - npm run build
  artifacts:
    name: 'bundle'
    paths: 
      - dist/

# 部署开发服务器
deploy:
  stage: deploy
  only:
    - test
  tags:
    - test-vue
  script:
    - "[[ -z ${CI_PROJECT_PATH_SLUG} ]] && echo 'CI_PROJECT_PATH_SLUG is empty.' && exit 1"
    - "webpath=/www/web/${CI_PROJECT_PATH_SLUG}"
    - rsync -azv dist/  ${webpath}
    - echo ${webpath}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题