我想通过aws codebuild进程为我的nodejs lambda创建一个zip工件 - 这样lambda函数可以在S3中使用这个zip文件作为源代码,我们在codebuild中使用git commit id进行管理的部署“证明”
我在github-repo中的文件结构是
grep -A1 -B1 -n hhhh abcd.txt | sed -e 's/[^0-9].*$//' -e 's/$/s|^|#|/' | sed -f- abcd.txt
现在对于nodejs lambda项目我想要没有zip文件夹的zip文件(我们需要lambda中的nodejs项目)所以zip应该直接包含以下文件
folder1
- myfile.js
- otherfile.js
folder2
- otherfiles.js
package.json
的问题:
1)S3中的输出zip包含在文件夹中,即.zip-> rootfolder-> myfile.js而不是我们需要.zip-> myfiles.js 这对于lambda来说是不可用的,因为对于nodejs它应该有root zip文件而不是它们内部(文件夹内没有相对路径)
2)路径 - 你可以看到myfile.js在一个文件夹里面我想要相对路径被省略 - 我试过丢弃路径但问题是所有的node_module文件也在文件夹中而不是在文件夹中作为丢弃path适用于它们 - 我可以只为myfile.js而不是node_module文件夹设置discard path吗? 我目前的yaml文件:
- myfile.js
- node_module ==> folder from codebuild via npm install command
如果有人能为此提供解决方案会很棒吗?
如果解决方案不包含更改github-repo文件夹结构并且我想在该repo中为其他文件重复此操作以创建其他lambda函数,那将会很棒。
编辑:
我使用下面的yaml文件,在@awsnitin回答
之后一切正常artifacts:
files:
- folder/myfile.js
- node_modules/**/*
discard-paths: yes
答案 0 :(得分:8)
不幸的是丢弃路径在这种情况下不起作用。最佳选择是将必要的文件作为构建逻辑(buildspec.yml)的一部分复制到新文件夹,并在工件部分中指定该文件夹。这是一个示例buildspec文件
post_build:
commands:
- mkdir build-output
- cp -R folder/myfile.js node_modules/ build-output
artifacts:
files:
- build-output/**/*