我正在构建一个项目,将所有文件放在'dist'文件夹中,并通过CodeBuild运行它。我试图让它将'dist'中的所有文件和文件夹放入s3存储桶的根目录中,但是我无法弄清楚如何使其工作。
我的'dist'文件夹看起来像这样:
- index.html
- somecssfiles.css
- fonts/
- - some fonts or w/e
- js/
- - some javascript files
我尝试了很多不同的东西,但似乎无法将'dist / *'放入s3存储桶的根目录。这是buildspec.yml文件中artifacts
属性的当前迭代:
artifacts:
files:
- '*'
discard-paths: yes
base-directory: 'dist'
我认为这可能有用,但它忽略了文件夹。感谢阅读,感谢任何帮助。
答案 0 :(得分:5)
我认为您丢失了一块-尚不清楚,但是您需要使用以下工件在Codebuild模板中指定路径:
apache poi 4.0.1
然后确保在代码构建项目的“工件”部分中,您通常指定S3存储桶,但将“可选”名称参数添加为shiftRows
这会将输出设置为S3目录的根-请参见https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name
artifacts:
files:
- '**/*'
base-directory: 'dist'
答案 1 :(得分:3)
我最近才知道这件事,所以如果我不对,请高手请原谅我,但是:
"discard-paths: yes"
会丢弃您的目录结构。它基本上可以平整你的神器集。如果(像我一样)你只想扔掉到你的工件文件夹的路径,把那个完整的路径放在" base-directory"领域。
同样,这部分我不确定,但在我看来,你不能告诉CodeBuild不要对你的工件应用服务器端加密,这意味着如果它是一个你打算允许人们使用的网站要浏览,这不会起作用,至少开箱即用。我最终做的不是使用codebuild的artifact部分,而是添加了以下post_build命令:
命令:
- aws s3 sync my/artifact/path/ s3://my-bucket-name/
编辑:我正在使用我创建的Docker镜像构建并添加到Amazon的ECR中,我必须在我的映像中安装AWS CLI才能运行该命令。 / p>
答案 2 :(得分:2)
遵循 CodePipeline 的范式,我建议您使用代码构建生成仅包含文件夹的工件,然后将该工件部署到任何位置,例如使用 AWS Code Deploy 迁移到 S3。
但如果你真的想使用代码构建,那么下面是一个解决方案:
在 Codebuild template
中使用:
artifacts:
files:
- "dist/**/*"
然后在 AWS 控制台中编辑您的代码构建项目的“工件”部分,使用以下输入:
取自aws documentation的其他示例:
如果 path 设置为 MyArtifacts,namespaceType 设置为 BUILD_ID,name 设置为 MyArtifact.zip,则输出工件存储在 MyArtifacts//MyArtifact.zip 中。
如果 path 为空,namespaceType 设置为 NONE,name 设置为“/”,则输出工件存储在输出桶的根目录中。
如果 path 设置为 MyArtifacts,namespaceType 设置为 BUILD_ID,name 设置为“/”,则输出工件存储在 MyArtifacts/ 中。