gitlab: 利用前端 lock 文件作为缓存的 key

Using lock file as Gitlab CI/CD cache key
更新于: 2023-11-15 16:30:59

简介

Gitlab CI/CD 提供了一种机制来缓存项目依赖项,以便可以在 pipelines 和作业之间重用和共享它。使用缓存可以减少花费在每个作业上的时间。可以通过在文件中使用cache:关键字来启用缓存。.gitlab-ci.yml它还允许为cache:key每个缓存提供指令。可以使用不同的策略来生成缓存键。

缓存key

例如:使用预定义的变量,例如$CI_COMMIT_REF_SLUG为每个分支创建单独的缓存。

但是使用 npm 的项目有其用于管理依赖关系的锁定文件,该文件可用于创建缓存键。仅当更改锁定文件时才会更新缓存。通过添加cache:key指令,将密钥保存为锁定文件的 SHA 校验和,因此密钥仅在锁定文件更新时才会更改。即使您的项目中有许多分支,除非更新包或添加新包,它们都可以共享相同的缓存。

使用文件<yarn对应使用 yarn.lock>

这是使用 package-lock.json 作为缓存键的示例,它会在您安装任何软件包时自动生成。

.gitlab-ci.yml 使用 npm

stages:
  - ci

.cache: &cache
  cache:
    key:
      files:
        - yarn.lock
        - package-lock.json
    paths:
      - node_modules

lint:
  stage: ci
  image: node:12.14.1
  <<: *cache
  script:
    - npm install
    - npm run lint

test:
  stage: ci
  image: node:12.14.1
  <<: *cache
  script:
    - npm install
    - npm run test

.gitlab-ci.yml  使用 yarn

  • 注意: cache:key:files config has too many items (maximum is 2)
stages:
  - ci

.cache: &cache
  cache:
    key:
      files:
        - yarn.lock
    paths:
      - node_modules

lint:
  stage: ci
  image: node:12.14.1
  <<: *cache
  script:
    - yarn
    - yarn lint

test:
  stage: ci
  image: node:12.14.1
  <<: *cache
  script:
    - yarn
    - yarn test

policy

  • pull-push: 读写
  • pull: 读

参考

https://rakshanshetty.in/using-lock-file-as-gitlab-cache-key/

https://stackoverflow.com/questions/67811761/gitlab-cache-not-uploading-due-to-policy