7

我想通过 aws codebuild 过程为我的 nodejs lambda 创建一个 zip 工件 - 以便 lambda 函数可以将此 zip 文件用作 S3 中的源,并且我们有一个部署“证明”,用于在 codebuild 中使用 git commit id 进行管理

我在 github-repo 中的文件结构是

folder1
   - myfile.js
   - otherfile.js
folder2
   - otherfiles.js
package.json

现在对于nodejs lambda项目,我想要没有zip文件夹的zip文件(对于lambda中的nodejs项目,我们需要它)所以zip应该直接包含以下文件

- myfile.js
- node_module ==> folder from codebuild via npm install command 

问题:

1) S3 中的输出 zip 包含在文件夹中,即 .zip->rootfolder->myfile.js 而不是我们需要 .zip->myfiles.js 这对 lambda 不可用,因为对于 nodejs 它应该在根 zip 中有文件而不是在里面它们(文件夹内没有相对路径)

2) 路径 - 如您所见,myfile.js 位于文件夹内他们两个 - 我可以只为 myfile.js 而不是为 node_module 文件夹设置丢弃路径吗?我当前的 yaml 文件:

artifacts:
  files:
    - folder/myfile.js
    - node_modules/**/*
  discard-paths: yes 

如果有人可以为此提供解决方案,那就太好了?

如果解决方案不包含更改 github-repo 文件夹结构,那就太好了,我也想在该 repo 中对其他文件重复此操作,以创建其他 lambda 函数。

编辑:

我在下面使用了 yaml 文件,@awsnitin 回答后一切正常

version: 0.2

phases:
  build:
    commands:
      - echo Build started on `date`
      - npm install
  post_build:
    commands:
      - echo Running post_build commands
      - mkdir build-output
      - cp -R folder1/myfile.js build-output
      - mkdir -p build-output/node_modules
      - cp -R node_modules/* build-output/node_modules
      - cd build-output/
      - zip -qr build-output.zip ./*
      - mv build-output.zip ../
      - echo Build completed on `date`
artifacts:
  files:
    - build-output.zip
4

2 回答 2

9

不幸的是,丢弃路径在这种情况下不起作用。最好的选择是将必要的文件复制到一个新文件夹作为构建逻辑 (buildspec.yml) 的一部分,并在工件部分指定该文件夹。这是一个示例构建规范文件

post_build:
    commands:
      - mkdir build-output
      - cp -R folder/myfile.js node_modules/ build-output
artifacts:
  files:
    - build-output/**/*
于 2017-06-30T20:23:03.370 回答
0

我只是在 Python 上遇到了这个问题,但我认为我的解决方案适用于 Node.js,因为它们都依赖于 .zip 文件。以下是我的 buildspec.yml:

artifacts:
  files:
    - '**/*'
  base-directory: target

上面的代码压缩目标目录下的文件(我的 .py 和包是 pip 安装的,或者在 Node.js 的情况下,所有 .js 和 node_modules)并将其保存到 S3 存储桶。之前不需要压缩任何东西,也不需要将其列为工件文件。我在 CodeFile 中使用了 CodeBuild,所以https://s3bucket/.../random-part它确实是一个从buildspec.yml/artifacts/files/base-directory声明中生成的 zip 文件。

于 2021-10-17T02:57:38.157 回答