如何在CircleCI中缓存Docker映像构建的纱线依赖项?

如何在CircleCI中缓存Docker映像构建的纱线依赖项?,docker,yarnpkg,circleci,Docker,Yarnpkg,Circleci,我的纱线安装s现在需要约5分钟。我在想办法把它们砍掉 现在,在我的Dockerfile中,我有以下内容: COPY package.json yarn.lock node_modules /usr/src/app/ COPY ${YARN_CACHE} /root/.cache/yarn/ WORKDIR /usr/src/app # We are doing this so that we can make use of layer caching # (i.e. most likely

我的
纱线安装
s现在需要约5分钟。我在想办法把它们砍掉

现在,在我的Dockerfile中,我有以下内容:

COPY package.json yarn.lock node_modules /usr/src/app/
COPY ${YARN_CACHE} /root/.cache/yarn/
WORKDIR /usr/src/app

# We are doing this so that we can make use of layer caching 
# (i.e. most likely yarn deps won't change as often as the app code)
COPY . /usr/src/app

# yarn install
RUN yarn install
在我的圆形文件中,我有

  - restore_cache:
     keys:
       # only restores cache if the yarn file is the same
       - yarn-packages-v4-{{ checksum "yarn.lock" }}
  - run: docker pull "xxx.dkr.ecr.us-east-1.amazonaws.com/website:latest"
  - run: docker build --build-arg NODE_ENV=production --build-arg YARN_CACHE=$(yarn cache dir) --force-rm -t xxx.dkr.ecr.us-east-1.amazonaws.com/website:build-${CIRCLE_BUILD_NUM} .

然而,我的纱线安装仍然需要5分钟。我做错了什么吗?

问题是
纱线缓存目录的结果是一个外部文件夹,它要么不存在于docker构建中,要么只是空的。你有两个选择

  • 设置一个.yarnrc并设置“cache folder”(请参阅)在构建目录中创建一个缓存文件夹,然后在Docker运行之外运行
    warn install
  • 向CircleCI提供未指定数量的现金以使其启用,这将在没有包更改的情况下加快构建速度
  • 尝试其他神奇的选项之一(例如)手动设置缓存