我将CircleCI配置为尝试缓存依赖项,这样就不必在每次提交时运行yarn install
。
这就是我的config.yml
文件的样子:
version: 2.1
jobs:
build-and-test-frontend:
docker:
- image: circleci/node:14
steps:
- checkout
- restore_cache:
name: Restore Yarn Package Cache
keys:
- yarn-packages-{{ checksum "yarn.lock" }}
- run:
working_directory: ./frontend/tests
name: Run jest tests
command: |
yarn install --frozen-lockfile --cache-folder ~/.
yarn test
- save_cache:
name: Save Yarn Package Cache
key: yarn-packages-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
workflows:
sample:
jobs:
- build-and-test-frontend
但是,当restore_cache
或save_cache
试图运行时,我会得到以下错误:
error computing cache key: template: cacheKey:1:17: executing "cacheKey" at <checksum "yarn.lock">: error calling checksum: open /home/circleci/project/yarn.lock: no such file or directory
我对使用CircleCI非常陌生,所以我不知道如何解释这一点。我能做些什么来解决这个问题?
编辑:
这是我的目录的结构:
--project_root
|
|--frontend
|-node_modules/
|-public/
|-src/
|-tests/
|-package.json
|-yarn.lock
发布于 2021-08-23 16:05:01
我很难给出一个很好的答案,因为我无法在回购中看到您的文件,但是您现在的配置表明,您拥有的yarn.lock
文件不是在回购的根上,而是在./frontend/tests
中。
如果这是您想要保存的位置,那么我建议将working_dir
键从步骤级别移到作业级别。然后,这将应用于每个步骤,包括缓存步骤。然后他们应该找到他们要找的文件。
更新:
谢谢你的回购树。根据这一点,您可能希望配置如下:
version: 2.1
workflows:
sample:
jobs:
- build-and-test-frontend
jobs:
build-and-test-frontend:
docker:
- image: cimg/node:14.17
working_directory: ./frontend
steps:
- checkout
- restore_cache:
name: Restore Yarn Package Cache
keys:
- yarn-packages-{{ checksum "yarn.lock" }}
- run:
name: Run jest tests
command: |
yarn install --frozen-lockfile --cache-folder ~/.
yarn test
- save_cache:
name: Save Yarn Package Cache
key: yarn-packages-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
在这里你会注意到以下几点:
,
workflows
移到了那个顶部。这只是个人风格上的选择,但我相信,随着配置的增长,它有助于保持配置的可读性。working_directory
移到了作业级别,而不是原来的步骤。working_directory
设置为前端目录。CircleCI上的大多数文件将相对于working_directory。因为这是yarn.lock
的位置,所以我设置它。circleci/node:14
更改为cimg/node:14
。不推荐circleci
名称空间中的图像。接下来,您将希望使用位于cimg
命名空间.中的更新的图像。
https://stackoverflow.com/questions/68850612
复制相似问题