尝试 restore/save 缓存时出现 CircleCI 错误

CircleCI error when attempting to restore/save cache

我正在配置 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_cachesave_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

我很难给出一个很好的答案,因为我在回购协议中看不到你的文件,但你现在的配置表明你拥有的 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

您会在这里注意到一些事情:

  1. 我将 workflows 移动到那个顶部。这只是个人风格的选择,但我相信它有助于在配置增长时保持配置的可读性。
  2. 我将 working_directory 移动到作业级别而不是它所在的步骤。
  3. 我将working_directory设置为前端目录。 CircleCI 上的大多数文件路径都与 working_directory 相关。由于那是 yarn.lock 所在的位置,所以这就是我设置它的位置。
  4. 我将图像从 circleci/node:14 更改为 cimg/node:14circleci 命名空间中的图像已弃用。展望未来,您将需要使用 cimg 命名空间中较新的 CircleCI 图像。