AWS CodeBuild不适用于纱线工作区

时间:2019-04-28 12:31:48

标签: yarnpkg aws-codebuild yarn-workspaces

我在我的存储库中使用Yarn Workspaces,并且还使用AWS CodeBuild构建我的软件包。当构建开始时,CodeBuild需要60秒钟来安装所有软件包,因此我想避免这段时间缓存node_modules文件夹。

当我添加时:

cache:
  paths:
    - 'node_modules/**/*'

到我的buildspec文件并启用LOCAL_CUSTOM_CACHE,我收到此错误:

  

错误发生意外错误:“ EEXIST:文件已存在,mkdir'/codebuild/output/src637134264/src/git-codecommit.us-east-2.amazonaws.com/v1/repos/MY_REPOSITORY/node_modules/@软件包/配置”。

是否可以通过配置AWS CodeBuild或Yarn来消除此错误?

我的buildspec文件:

version: 0.2
phases:
  install:
    commands:
      - npm install -g yarn
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - yarn
  pre_build:
    commands:
      - git rev-parse HEAD
      - git pull origin master
  build:
    commands:
      - yarn run build
      - yarn run deploy
  post_build:
    commands:
      - echo 'Finished.'
cache:
  paths:
    - 'node_modules/**/*'

谢谢!

更新1:

Yarn试图在/codebuild/output/src637134264/src/git-codecommit.us-east-2.amazonaws.com/v1/repos/MY_REPOSITORY/node_modules/@packages/configs阶段使用命令- yarn创建文件夹install。此文件夹是我的存储库软件包之一,名为@packages/config。当我在计算机上运行yarn时,Yarn将按照here的说明创建链接我的软件包的文件夹。我的node_modules结构在计算机上的示例:

node_modules/
|-- ...
|-- @packages/
|   |-- configs/
|   |-- myPackageA/
|   |-- myPackageB/
|-- ...

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题(“EEXIST: file already exists, mkdir”),我最终使用了 S3 缓存,并且效果很好。 注意:由于某种原因,第一次上传到 S3 的时间太长(10 分钟),其他的都很好。

之前:

[5/5] Building fresh packages...
--
Done in 60.28s.

之后:

[5/5] Building fresh packages...
--
Done in 6.64s.

如果您已经配置了您的项目,您可以编辑访问项目的缓存 -> 编辑 -> 工件 -> 附加配置。

我的buildspec.yml如下:

version: 0.2

phases:
  install:
    runtime-versions:
       nodejs: 14
  build:
    commands:
      - yarn config set cache-folder /root/.yarn-cache
      - yarn install --frozen-lockfile
      - ...other build commands go here

cache:
  paths:
    - '/root/.yarn-cache/**/*'
    - 'node_modules/**/*'
    # This third entry is only if you're using monorepos (under the packages folder)
    # - 'packages/**/node_modules/**/*'

如果您使用 NPM,您会执行类似的操作,但命令略有不同:

version: 0.2

phases:
  install:
    runtime-versions:
       nodejs: 14
  build:
    commands:
      - npm config -g set prefer-offline true
      - npm config -g set cache /root/.npm
      - npm ci
      - ...other build commands go here

cache:
  paths:
    - '/root/.npm-cache/**/*'
    - 'node_modules/**/*'
    # This third entry is only if you're using monorepos (under the packages folder)
    # - 'packages/**/node_modules/**/*'

感谢:https://mechanicalrock.github.io/2019/02/03/monorepos-aws-codebuild.html