AWS Codebuild将所有工件放在S3存储桶的根目录中

问题描述 投票:5回答:2

我正在构建一个项目,将所有文件放在'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'

我认为这可能会奏效,但它忽略了文件夹。任何帮助表示赞赏,感谢阅读。

aws-codebuild
2个回答
4
投票

我最近才想到这一点,所以如果我不对,请高手请原谅我,但是:

"discard-paths: yes"抛弃了您的目录结构。它基本上可以平整你的神器集。如果(像我一样)你只想扔掉你的工件文件夹的路径,把那个完整的路径放在“base-directory”字段中。

同样,这部分我不确定,但在我看来,你不能告诉CodeBuild不要对你的工件应用服务器端加密,这意味着如果它是一个你打算允许人们浏览的网站,那就不行了工作,至少开箱即用。我最终做的不是使用codebuild的artifact部分,而是添加了以下post_build命令:

命令:- aws s3 sync my/artifact/path/ s3://my-bucket-name/

编辑:我正在使用我创建并添加到Amazon ECR的docker镜像构建,我必须在我的映像中安装AWS CLI才能运行该命令。


10
投票

我认为你错过了一件 - 目前尚不清楚,但你需要在Codebuild模板中使用以下工件指定路径:

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

然后确保在codebuild项目的“工件”部分中,通常指定S3存储桶,但将“可选”名称参数添加为/

这会将输出设置为S3目录的根目录 - 请参阅https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name

If type is set to S3, this is the name of the output artifact object. If you set the name to be a forward slash ("/"), the artifact is stored in the root of the output bucket.

© www.soinside.com 2019 - 2024. All rights reserved.