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

Xyl*_*lud 7 aws-codebuild

我正在构建一个项目,将所有文件放在'dist'文件夹中,并通过CodeBuild运行它.我试图让它将'dist'中的所有文件和文件夹放入s3存储桶的根目录中,但是我无法弄清楚如何使其工作.

我的'dist'文件夹看起来像这样:

- index.html - somecssfiles.css - fonts/ - - some fonts or w/e - js/ - - some javascript files

我已经尝试了很多不同的东西,但似乎无法让它只是将'dist/*'放入s3存储桶的根目录中.这是artifacts在buildspec.yml文件中我的属性的当前迭代:

artifacts: files: - '*' discard-paths: yes base-directory: 'dist'

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

abb*_*dev 13

我认为您缺少了一块-尚不清楚,但是您需要使用以下工件在Codebuild模板中指定路径:

artifacts:
  files:
    - '**/*'
  base-directory: 'dist'
Run Code Online (Sandbox Code Playgroud)

然后确保在代码构建项目的“工件”部分中,通常指定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.

  • 对于阅读本文的任何人:不要像我一样是个傻瓜,将“名称”与“路径(可选)”混淆。您想将 *Name* 设置为“/” (4认同)

小智 5

我只是最近才发现这个问题,因此如果我不正确,请专家原谅我,但是:

"discard-paths: yes"就是丢弃您的目录结构的原因。它实质上使您的工件集变平。如果(像我一样)只想扔掉工件文件夹的路径,请将完整路径放在“基本目录”字段中。

再说一遍,我不确定这一部分,但是在我看来,您不能告诉CodeBuild不要对您的工件应用服务器端加密,这意味着,如果您打算让人们浏览的站点,那是不会的工作,至少开箱即用。我最终要做的是根本不使用codebuild的工件部分,而是添加了以下post_build命令:

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

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